[ruFlash] не успевает "активироваться" "брат" от одного родителя?

2 views
Skip to first unread message

Serghei Meiciuc

unread,
Mar 10, 2007, 5:26:35 PM3/10/07
to ruFlash
Здравствуйте, ситуация в следующем.

есть родитель
class A extends MovieClip{}

у него имеются наследники:

class B extends A{
var c:C;
function B(){
super();
c = this["movie"];
trace(c);// ...........movie
trace(c.anyFunction);// undefined
}
}


class C extends A{
function A(){
super();
}
function anyFunction(){};
}

Это я пытаюсь компонент сотворить - не могу же я передавать его запчасти уже активированными по ссылке?! А если внаглую из рута обратиться к требуемому мувиклипу (он же экземпляр С внутри В), то без проблем - все методы и свойства видны и работают!

ЗЫ: Обычно не работаю с наследниками мувиклипа - подобных проблем не встречал ранее (что-то упустил важное?).

Спасибо.
--
с уважением,
meicuc

miramax

unread,
Mar 10, 2007, 5:57:35 PM3/10/07
to ruF...@googlegroups.com
Привет Serghei Meiciuc. 
 

есть родитель
class A extends MovieClip{}

у него имеются наследники:

class B extends A{
var c:C;
function B(){
super();
c = this["movie"];
trace(c);// ...........movie
trace(c.anyFunction);// undefined
}
}
 
Что такое movie ?

class C extends A{
function A(){
super();
}
function anyFunction(){};
}
 
Почему в теле класса присутствует конструктор суперкласса, опечатка ?

--
Shammasov Max aka miramax
http://AS3.ru

Serghei Meiciuc

unread,
Mar 10, 2007, 7:07:46 PM3/10/07
to ruF...@googlegroups.com
c = this["movie"];
trace(c);// ...........movie
trace( c.anyFunction);// undefined
}
}
 
Что такое movie ?

movie - имя мувиклипа (в библиотеке я нацепил на него класс С, который является наследником А, который в свою очередь наследует от Мувиклипа.)
 

Почему в теле класса присутствует конструктор суперкласса, опечатка ?


нет, не опечатка -  конструктор суперкласса выполняет ряд действий - в частности EventDispatcher.initialize (this);


--
с уважением,
meicuc

Serghei Meiciuc

unread,
Mar 10, 2007, 7:23:28 PM3/10/07
to ruF...@googlegroups.com

Почему в теле класса присутствует конструктор суперкласса, опечатка ?


нет, не опечатка -  конструктор суперкласса выполняет ряд действий - в частности EventDispatcher.initialize (this);


убрал super() - это я последний месяц на яве сидел - теперь везде их вешаю. Все равно не работает - undefined все методы
--
с уважением,
meicuc

miramax

unread,
Mar 10, 2007, 7:27:31 PM3/10/07
to ruF...@googlegroups.com

убрал super() - это я последний месяц на яве сидел - теперь везде их вешаю. Все равно не работает - undefined все методы

--
 
Я не это имел ввиду. Почему в теле класса C есть функция A, и это не может компиллироваться.
Вобщем хорошо бы посмотреть на исходники.

Serghei Meiciuc

unread,
Mar 11, 2007, 4:41:20 AM3/11/07
to ruF...@googlegroups.com
Я не это имел ввиду. Почему в теле класса C есть функция A, и это не может компиллироваться.
Вобщем хорошо бы посмотреть на исходники.

Ах вот оно что - да, конечно, это опечатка.

В своем случае разобрался.

clip box:
в нем clip button

для клипа box - class Box
для клипа button - class Button

Надеялся сделать следующее. Размещать на Stage клипы, раздавать им имена и вешать на них классы в библиотеке. Причем, конструкторы вызываются, нормально, для всех, но клип бох воспринимает button как простой мувиклип, а вот если я его аттачу, тода он видит его как экземпляр класса Button.

--
с уважением,
meicuc

Serghei Meiciuc

unread,
Mar 11, 2007, 4:52:52 AM3/11/07
to ruF...@googlegroups.com
Надеялся сделать следующее. Размещать на Stage клипы, раздавать им имена и вешать на них классы в библиотеке. Причем, конструкторы вызываются, нормально, для всех, но клип бох воспринимает button как простой мувиклип, а вот если я его аттачу, тода он видит его как экземпляр класса Button.

Да - все дело в порядке вызова конструкторов - сначала вызывается конструктор Box, а затем конструктор Button. Потому Бох и не может подписаться на события Буттона. А вот если подписываться уже потом - по какому-нибудь init() извне - тоде все работает. Видимо - это не обойти. Какая жалость.


--
с уважением,
meicuc

Denis Kolyako

unread,
Mar 11, 2007, 6:07:31 AM3/11/07
to Serghei Meiciuc
Здравствуйте, Serghei.

> Это я пытаюсь компонент сотворить - не могу же я передавать его
> запчасти уже активированными по ссылке?! А если внаглую из рута
> обратиться к требуемому мувиклипу (он же экземпляр С внутри В), то
> без проблем - все методы и свойства видны и работают!

Вложенные клипы инициализируются позже родителей.
Т.е. регистрацию нужно отложить до следующего кадра.

private var movie:C;
public function B() {
super();
this.onEnterFrame = this.postponedRegistration;
}
private function postponedRegistration():Void {
delete this.onEnterFrame;
trace(this.movie.anyMethod);
}

Денис Коляко
флеш-технолог
______________________________________________________________________
e...@design.ru | http://www.artlebedev.ru | http://www.etcs.ru

leo

unread,
Mar 11, 2007, 6:09:12 AM3/11/07
to Serghei Meiciuc
> А вот если подписываться уже потом -
> по какому-нибудь init() извне - тоде все работает. Видимо - это не
> обойти. Какая жалость.

Это действительно не обойти.
Как вариант - в родительском классе использовать onLoad - на момент его
вызова все дочерние клипы уже проинициализируются.

--
leo

Serghei Meiciuc

unread,
Mar 11, 2007, 6:39:32 AM3/11/07
to ruF...@googlegroups.com
  Вложенные клипы инициализируются позже родителей.
  Т.е. регистрацию нужно отложить до следующего кадра.

  private var movie:C;
  public function B() {
         super();
         this.onEnterFrame = this.postponedRegistration;
  }
  private function postponedRegistration():Void {
          delete this.onEnterFrame ;
          trace(this.movie.anyMethod);
  }

Да, спасибо, тоже вариант. Единственное - onEnterFrame если будет где задействован в родительском клипе - придется его тоже "восстанавливать"

--
с уважением,
meicuc

Serghei Meiciuc

unread,
Mar 11, 2007, 6:42:51 AM3/11/07
to ruF...@googlegroups.com

Это действительно не обойти.
Как вариант - в родительском классе использовать onLoad - на момент его
вызова все дочерние клипы уже проинициализируются.

Спасибо, действительно похоже на выход. Во всяком случае, на данный момент выглядит практически идеально. Надо будет поковыряться - иди знай, может где дальше этот подход может вскрыть другие грабли. Но сейчас - в самом деле, решение.

--
с уважением,
meicuc
Reply all
Reply to author
Forward
0 new messages