![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|
|
|||||
|
Регистрация: Apr 2009
Сообщений: 104
|
Добрый день. Ситуация следующая - есть родительский класс-мувик, в нем несколько дочерних мувиков, на которые вешается обработчик события onEnterframe.
В этом обработчике необходимо обратиться к свойству мувика, который сгенерил событие (когда пишу просто this.anyField компилятор выдает ошибку что в классе Main нету такого свойства). Кроме того нужно обратиться и к методам класса Main тоже. Ниже приведена примерная схема того что нужно. Если перенести код из класса в кадр главного мувика то все работает, а вот в классе даже и не знаю как сделать. class Main extends MovieClip{ var movies:Array; function Main(){ for (var i = 0; i < 15; i++) { movies[i] = attachMovie("ChildMovie", "mc"+i, i); movies[i].speed = 20; movies[i]._x = 100+20*i; movies[i].finishX = 200+20*i; } } function Play(){ for (var i = 0; i < 15; i++) movies[i].onEnterFrame = Run; } function Run() { this.speed+=1; /*Здесь хотелось бы обратиться к свойствам соответствующего мувика*/ if (this._x == this.finishX) Stop(); /*А здесь вызвать метод класса Main*/ } function Stop(){ } } Последний раз редактировалось xjack; 13.03.2010 в 14:59. |
|
|||||
|
movies == undefined, i==undefined. Сначала это поправьте . А если поправлено то выкладывайте код полностью, а не по куску
Добавлено через 2 минуты Про anyfield. Если верно понял : |
|
|||||
|
...
модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
|
Цитата:
Но это не совсем верно, на мой взгляд, вызывать обработчик содержащийся в одном объекте в области видимости другого. Могу предложить такой вариант: import com.aditall.utils.Delegate; class Main { public function Main() { super(); myObject = {}; myObject.onMouseDown = Delegate.create(this, myObject_onMouseDownHandler, [ { target: myObject } ]); Mouse.addListener(myObject); } private var myObject; private function myObject_onMouseDownHandler(event:Object):Void { trace(event.target == myObject); trace(this instanceof Main); } } |
|
|||||
|
...
модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
|
Цитата:
|
|
|||||
|
Да ваще компилятор его сам поставит. Если считается хорошим тоном - то что он делает, ты вкурсе вообще?, точнее так : класс без супер конструктора и класс с супер - чем будут отличаться визуально , а так же просто при компиляции
Добавлено через 8 минут class Main extends MovieClip{ var movies:Array; function Main(){ for (var i = 0; i < 15; i++) { movies[i] = attachMovie("ChildMovie", "mc"+i, i); movies[i].speed = 20; movies[i]._x = 100+20*i; movies[i].finishX = 200+20*i; // чтобы видеть значения в следующей функции нужно испольховать делегат, в //твоем случае функция маин тока задает координаты и аттачит мувики, НО при //этом нету направления на продолжение скрипта. Должно быть приблиз так : //- координаты и прочее ( например в цикле) //- вызов функции с делегатом для сохранения параметров, или же вызов функции //через делегат inils для сохранения параметров, а так же передачи параметров //функции } } function Play(){ for (var i = 0; i < 15; i++) movies[i].onEnterFrame = Run; // здесь ипользовалася бы только делегат inils //- movies[i].onEnterFrame = inils.Delegate.create(this,Run,[i]); } function Run(SUPER_I) { movies[SUPER_I]+=1; /*Здесь хотелось бы обратиться к свойствам соответствующего мувика*/ if (this._x == this.finishX) this.Stop(); /*А здесь вызвать метод класса Main*/ // а если важны например параметры из этой функции, то можно либо делгатом //снова либо setInterval , он кстати тоже сохранит параметры. } function Stop(){ } } |
|
|||||
|
...
модератор форума
Регистрация: Sep 2006
Адрес: Minsk
Сообщений: 4,286
|
Смысл в том, чтобы неявное показать явным. Т.е. это из разряда того, чтобы писать public перед методами класса/классом, или при создании экземпляра класса писать всегда круглые скобки, даже если не передаются параметры. Или же показывать явно, что метод не возвращает никакого результата.
Цитата:
А, вообще, если хотите научиться грамотно оформлять свой код, советую почитать о более менее общепринятых конвенциях http://opensource.adobe.com/wiki/dis...ng+Conventions |
![]() |
![]() |
Часовой пояс GMT +4, время: 01:37. |
|
|
« Предыдущая тема | Следующая тема » |
|
|