Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Проблема с наследованным классом (http://www.flasher.ru/forum/showthread.php?t=136597)

alikSmehoff 20.02.2010 19:44

Проблема с наследованным классом
 
У меня есть класс myMC, наследованный от класса MC. в myMC есть объект типа MovieClip с именем myMCObj, созданный вручную, без кода. Для myMC в as-файле написан код:
Код AS3:

...
public class myMC extends MC
{
  public function myMC()
    {
      myMCObj.rotation = 30;
    }
}
...

Но ролик не запускается, выдается ошибка
Цитата:

1120: Access of undefined property myMCObj.
Как мне обратиться к myMCObj?

udaaff 20.02.2010 19:55

Код AS3:

public class MC extends MovieClip
{
 
    public function MC()
    {
        super();
 
        myMCObj = MovieClip(getChildByName("__myMCObj"));
    }
 
    protected var myMCObj:MovieClip;
 
}
 
public class MyMC extends MC
{
 
    public function MyMC()
    {
        super();
 
        myMCObj.rotation = 30;
    }
 
}

Если ничего не напутал...

ps: Названия классов принято с большой буквы писать.

Elser 03.03.2010 14:19

а с этим как быть?
 
всё бы было заметчтательно если бы не такая бяка:
Код AS3:

package com.elser.labsandtests { 
import flash.display.MovieClip;
 
public class MC extends MovieClip {
 
  public function MC() {
      super();
  }
 
}}
 
package com.elser.labsandtests { 
import flash.display.MovieClip;
import org.elser.labsandtests.MC;
 
public class MyMC extends MC {
 
  private var myMCObj:MovieClip;
 
  public function MyMC() {
      super();
      myMCObj = MovieClip(getChildByName("__myMCObj"));
      trace(myMCObj); // null
  }
 
}}

как с этим то бороться?

Волгоградец 03.03.2010 14:38

А что такое "__myMCObj"?

CrazyFlasher 03.03.2010 14:45

Вложений: 1
уберите галку "Automatically declare stage instances" и декларируйте все DisplayObjects вручную

Elser 03.03.2010 15:45

Цитата:

уберите галку "Automatically declare stage instances" и декларируйте все DisplayObjects вручную
я вкурсе про галку - всеравно не работает
Цитата:

А что такое "__myMCObj"?
в либе мувик MyMC, которому в связывание прописан класс com.elser.labsandtests.MyMC и который содержит чайлда __myMCObj, засунутого в него в IDE. инстанс мувика положен в IDE на стейдж

CrazyFlasher 03.03.2010 15:58

я и не писал, что должно заработать...просто это совет на будущее

Elser 03.03.2010 16:03

Поддерживаю CrazyFlasher`a - авто объявление инстансов на стейдже чаще всего зло - сам всегда снимаю, но суть вопроса не в этом - почему наследник мовиклипа запросто обращается к таким чайлдам а наследник наследника мовиклипа их не видит???

udaaff 03.03.2010 18:18

Должен всё видеть. Что у вас там за импорт какой-то странный во втором классе?
import org.elser.labsandtests.MC;

Elser 04.03.2010 11:58

сори за неточность
 
извиняюсь, первый код заработал после рестарта флеша
но проблема обнаружилась вот где:
Код AS3:

package com.elser.labsandtests { 
import flash.display.MovieClip;
 
public class MC extends MovieClip {
 
  private var one:Object;
  private var two:Object;
  public  var current:Object;
 
  public function MC(o:Object, t:Object) {
      super();
      one = o;        // вот если эти строки
      two = t;        // закоментить и убрать аргументы у конструктора,
      current = one; // то работает, а с ними нет
  }
 
}}

Код AS3:

package com.elser.labsandtests {  
import flash.display.MovieClip;
import org.elser.labsandtests.MC;
 
public class MyMC extends MC {
 
  private var stateOne:MovieClip;
  private var stateTwo:MovieClip;
 
  public function MyMC() {
      // super() // вот только если он тут в рабочем варианте  все ок (см. комент в предке)
      stateOne = MovieClip(getChildByName("oneState"));
      stateTwo = MovieClip(getChildByName("twoState"));
      trace(stateOne+", "+stateTwo+", "+numChilds); // null, null, 2
                          // причем их имена в getChildByName правильные (копипаст)
      super(stateOne, stateTwo);
                            //а надо сделать так, чтобы каждый потомок зарегил свойства,
                            //которые контролируются обобщенным кодом предка.
      trace(current);
  }
 
}}



Часовой пояс GMT +4, время: 16:48.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.