![]() |
belv, Это да.
Еще как вариант можно у таймера задать количество повторений нужное. Итак, на всякий случай проговорим вслух, что произошло. Код Код AS3:
"Берем экземпляр класса Star_demo, который фактически является экземпляром MovieClip и вызываем на нем метод getChildAt(i)... Мы можем это сделать, потому что MovieClip наследует свойства DisplayObject, а значит и метод getChildAt(). В резуьтате получаем объект типа DisplayObject, в котором вызываем метод stop()... И не можем этого сделать, потому что у него нет такого метода. Тогда этот объект мы превращаем снова в MovieClip, у которого метод Stop() существует." Если всё так, то остаются два подозрения: - Есть ли какие-то потери при таком приведении типов? Это же похоже на неестественный трюк, какой-то костыль чтоли? Или вниз по дереву наследования это вполне нормально? - Почему getChildAt() возвращает объект типа DisplayObject, а не MovieClip... Mareg, наследие AS2, понятно. |
getChildAt(i) возвращает объект типа Star а вы его приводите к типу данных MovieClip , на самом деле объект Star имеет 2 типа данных Star и MovieClip , так как он расширяет класс MovieClip.
А присваиваем переменной var mc = getChildAt(i); для того чтобы вызвать метод экземпляра dispose(). |
Цитата:
|
Все правильно написано, getChildAt возвращает DisplayObject, у которого нет метода stop()
На Код AS3:
Поэтому единственным способом будет указанный товарищем Bletraut, безопасно привести наш DisplayObject к MovieClip и вызвать метод stop уже у приведенного объекта. Тогда ошибка может возникнуть только при выполнении кода, если наш полученный DisplayObject нельзя привести к MovieClip, а следовательно и нельзя вызывать метод stop() |
Цитата:
Во-первых, у DisplayObject ведь нет dispose(), ведь так?.. Во-вторых, останавливать анимацию удалением информации из памяти - не слишком ли лихо?) Или я что-то не так понял? Добавлено через 5 минут Fogflasher Цитата:
Цитата:
|
Во-первых, у DisplayObject ведь нет dispose(), ведь так?..
Во-вторых, останавливать анимацию удалением информации из памяти - не слишком ли лихо?) Или я что-то не так понял? Отвечаю: var mc = getChildAt(i); где getChildAt(i) -это объект Star через переменную mc ссылающуюся на этот объект вызываем метод dispose() , который описан в классе Star, который останавливает таймер и соответственно анимацию. Чтобы увидеть это наглядно , что вызывается именно этот метод вызывается, переименуйте его например в disposeAnimateInStar а потом вызовите его mc.disposeAnimateInStar(); По поводу типов , в цикл добавьте код Код AS3:
DisplayObject MovieClip Star Потому-что происходит наследование. |
А, блин.
Прошу пардону, мой косяк - я в код Star'a не поглядел и теперь сидел и думал, откуда у DisplayObjecta dispose)) |
| Часовой пояс GMT +4, время: 07:37. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.