|
|
|||||
Регистрация: Jul 2015
Сообщений: 73
|
ошибка при само-удалении объекта
на сцене мувик "sdsd"
вот при таком коде package { import flash.display.MovieClip; import flash.events.Event; public class sdsd extends MovieClip { public function sdsd() { parent.removeChild(this); } } } package { import flash.display.MovieClip; import flash.events.Event; import flash.utils.Timer; import flash.events.TimerEvent; public class sdsd extends MovieClip { public function sdsd() { var tom:Timer = new Timer(100,1); tom.start() tom.addEventListener(TimerEvent.TIMER,go); function go(event:TimerEvent):void { parent.removeChild(this) as DisplayObject; } } } } TypeError: Error #1034: Type Coercion failed: cannot convert global to flash.display.DisplayObject. кто нибудь сталкивался с таким? в чем проблема? |
|
|||||
Во втором варианте this имеет совсем другое значение, потому слушатель анонимный. Сделайте слушатель методом класса, и все будет норм.
|
|
|||||
Регистрация: Feb 2014
Сообщений: 192
|
может надо в функции обработчике таймера писать не this, а переменную, до этого определнную в конструкторе var mk: MovieClip =this...
|
|
|||||
Регистрация: Jul 2015
Сообщений: 73
|
извиняюсь код чуток не тот код прислал
package { import flash.display.MovieClip; import flash.events.Event; import flash.utils.Timer; import flash.events.TimerEvent; public class sdsd extends MovieClip { public function sdsd() { var tom:Timer = new Timer(100,1); tom.start() tom.addEventListener(TimerEvent.TIMER,go); function go(event:TimerEvent):void { parent.removeChild(this); } } } } alexandrratush примером кода если можно, че то не совсем догнал Добавлено через 18 минут ааааааааа всеее, че то это я туплю все очень даже классно объяснил)) спасибо)) |
|
|||||
Цитата:
sdsd в данном случае является конструтором. То есть на момент создания экземпляра, у него никак не может быть родителя. И этот код кинет ошибку сразу же при запуске. |
|
|||||
Регистрация: Jul 2015
Сообщений: 73
|
мувик вручную выставлен на сцену, удаляет
|
|
|||||
Регистрация: Nov 2005
Сообщений: 149
|
тут вот товарищ выше ответил уже: "Во втором варианте this имеет совсем другое значение, потому слушатель анонимный. Сделайте слушатель методом класса, и все будет норм."
Т.е. - this внутри АНОНИМНОЙ функции уже не ссылается на экземпляр класса. Если использовать анонимную функцию, как в вашем коде, то ей надо в явном виде передать ссылку на класс. public class sdsd extends MovieClip { public function sdsd() { var tom:Timer = new Timer(100,1); tom.start() tom.addEventListener(TimerEvent.TIMER,go); var itsMe:sdsd = this; function go(event:TimerEvent):void { trace(itsMe) trace(this) //parent.removeChild(this); parent.removeChild(itsMe) } } } |
|
|||||
еще бы таймер остановить..
__________________
http://cleptoman.free-lance.ru achivements: дважды благословлен на воровство. осеяный благодатью |
|
|||||
Регистрация: Jul 2015
Сообщений: 73
|
meiciuc спасибо за пример , да товарищ все классно объяснил.
Добавлено через 47 секунд cleptoman у таймера выставлен один цикл, он сам остановится |
|
|||||
Оффтоп: я там забыл одно слово вставить, из-за этого предложение глупо звучит. Вот так лучше:
Во втором варианте this имеет совсем другое значение, потому что слушатель анонимный. Сделайте слушатель методом класса, и все будет норм. |
Часовой пояс GMT +4, время: 20:33. |
|
« Предыдущая тема | Следующая тема » |
|
|