|
|
|||||
Регистрация: Mar 2013
Сообщений: 290
|
belv, Это да.
Еще как вариант можно у таймера задать количество повторений нужное. Итак, на всякий случай проговорим вслух, что произошло. Код означает: "Берем экземпляр класса Star_demo, который фактически является экземпляром MovieClip и вызываем на нем метод getChildAt(i)... Мы можем это сделать, потому что MovieClip наследует свойства DisplayObject, а значит и метод getChildAt(). В резуьтате получаем объект типа DisplayObject, в котором вызываем метод stop()... И не можем этого сделать, потому что у него нет такого метода. Тогда этот объект мы превращаем снова в MovieClip, у которого метод Stop() существует." Если всё так, то остаются два подозрения: - Есть ли какие-то потери при таком приведении типов? Это же похоже на неестественный трюк, какой-то костыль чтоли? Или вниз по дереву наследования это вполне нормально? - Почему getChildAt() возвращает объект типа DisplayObject, а не MovieClip... Mareg, наследие AS2, понятно. |
|
|||||
[+1 16.07.13]
[+4 16.07.13] Регистрация: Oct 2005
Сообщений: 217
|
getChildAt(i) возвращает объект типа Star а вы его приводите к типу данных MovieClip , на самом деле объект Star имеет 2 типа данных Star и MovieClip , так как он расширяет класс MovieClip.
А присваиваем переменной var mc = getChildAt(i); для того чтобы вызвать метод экземпляра dispose(). |
|
|||||
Регистрация: Mar 2013
Сообщений: 290
|
Цитата:
|
|
|||||
Все правильно написано, getChildAt возвращает DisplayObject, у которого нет метода stop()
На компилятор вообще то ругается, поскольку у DisplayObject нет такого метода (полиморфизм окда), а сама флешка совершенно без понятия, у какого подкласса класса DisplayObject есть этот метод, поэтому никакого приведения к MovieClip, а тем более к Star не происходит. Поэтому единственным способом будет указанный товарищем Bletraut, безопасно привести наш DisplayObject к MovieClip и вызвать метод stop уже у приведенного объекта. Тогда ошибка может возникнуть только при выполнении кода, если наш полученный DisplayObject нельзя привести к MovieClip, а следовательно и нельзя вызывать метод stop() |
|
|||||
Регистрация: Aug 2012
Сообщений: 70
|
Поясните, пожалуйста, не очень понял.
Во-первых, у DisplayObject ведь нет dispose(), ведь так?.. Во-вторых, останавливать анимацию удалением информации из памяти - не слишком ли лихо?) Или я что-то не так понял? Добавлено через 5 минут Fogflasher Цитата:
Цитата:
|
|
|||||
[+1 16.07.13]
[+4 16.07.13] Регистрация: Oct 2005
Сообщений: 217
|
Во-первых, у DisplayObject ведь нет dispose(), ведь так?..
Во-вторых, останавливать анимацию удалением информации из памяти - не слишком ли лихо?) Или я что-то не так понял? Отвечаю: var mc = getChildAt(i); где getChildAt(i) -это объект Star через переменную mc ссылающуюся на этот объект вызываем метод dispose() , который описан в классе Star, который останавливает таймер и соответственно анимацию. Чтобы увидеть это наглядно , что вызывается именно этот метод вызывается, переименуйте его например в disposeAnimateInStar а потом вызовите его mc.disposeAnimateInStar(); По поводу типов , в цикл добавьте код trace(getChildAt(i) is DisplayObject); // для проверки нужно импортировать в класс import.display.DisplayObject trace(getChildAt(i) is Star); trace(getChildAt(i) is MovieClip); DisplayObject MovieClip Star Потому-что происходит наследование. Последний раз редактировалось belv; 09.07.2013 в 19:31. |
|
|||||
Регистрация: Aug 2012
Сообщений: 70
|
А, блин.
Прошу пардону, мой косяк - я в код Star'a не поглядел и теперь сидел и думал, откуда у DisplayObjecta dispose)) |
Часовой пояс GMT +4, время: 12:29. |
|
« Предыдущая тема | Следующая тема » |
Теги |
movieclip , stop() , Мук , ошибка 1061 |
Опции темы | |
Опции просмотра | |
|
|