|
|
|||||
Регистрация: Mar 2013
Сообщений: 290
|
Ошибки Мука. Не работает stop().
Всем привет.
Еще один базовый вопрос. Читаю Мука, разбираю простейший пример из главы Programmatic Timeline Control. Исходные данные: Основной файл: Star_demo.fla. В его библиотеке есть символ Star, и пять безымянных экземпляров на первом (и единственном) фрэйме. К этому символу привязан файл Star.as содержащий програмную анимацию. К Star_demo.fla привязан document class файл: Star_demo.as Который содержит такой код: package { import flash.display.MovieClip; public class Star_demo extends MovieClip { public function Star_demo ( ) { for (var i:int=0; i < numChildren; i++) { getChildAt(i).stop(); //1061: Call to a possibly undefined //method stop through a reference //with static type flash.display:DisplayObject. } } } } Что не так? Вроде бы всё ОК, класс расширяет MovieClip, а значит и наследует его метод stop(). Причем, если эту строчку заменить на: То список экземпляров выдается, все ОК. Свойство namе почему-то видно без проблем. |
|
|||||
Регистрация: Aug 2012
Сообщений: 70
|
Как я разумею, метод getChildAt() возвращает вам DisplayObject, у которого нет метода stop(). А вот свойство name у него есть - поэтому и возвращается без проблем)
Вы же здесь обращаетесь к методу объекта, который вам возвращается, а не к методу вашего класса, в котором работаете: UPD: Последний раз редактировалось NoisyFlasher; 09.07.2013 в 12:42. Причина: Я буду внимательно читать исходное сообщение, я буду внимательно читать исходное сообщение... |
|
|||||
|
|
|||||
Регистрация: Mar 2013
Сообщений: 290
|
NoisyFlasher, хм, про DisplayObject я как-то не подумал, весьма похоже что так.
Не, ну у меня тоже Adobe Flash CS3 Professional, хотя может его и не стоит считать нормальным IDE? В чем кстати, оптимальнее всего работать, на ваш взгляд? Или это от задач зависит... Bletraut, такой вариант ошибку не выдает, однако... анимация всё-равно продолжается. Может так и должно быть? Видимо он делает stop() на один миг, но потом всё повторяется циклически... |
|
|||||
Регистрация: Aug 2012
Сообщений: 70
|
Ну вот Bletraut показал верный путь, на мой взгляд - привести к MovieClip, а у того уже есть нужный метод.
Вообще, не стоит писать во Flash Professional - по-хорошему, его следует только для подготовки графики использовать. Ну или для каких-то мелких вещей - банер там нарисовать) Я начинал с Eclipse с плагином Flash Development Tools. FDT платный, но есть и бесплатная версия - мне, правда не понравилась. Сейчас пользуюсь Flash Develop (http://www.flashdevelop.org/). Он бесплатный, гибко настраиваемый - мне нравится. А по поводу того, что анимация продолжается - может это из-за того, что она программно задана?.. Можно код файла Star.as? |
|
|||||
[+1 16.07.13]
[+4 16.07.13] Регистрация: Oct 2005
Сообщений: 217
|
Класс Star.as выложите. Метод stop(); останавливает анимацию если она будет сделана на временной шкале, а так как у вас анимация написана через код (я думаю использованы твины) , то stop(); не остановит.А ошибка может быть из-за того ,что star это не MovieClip а Sprite , а у спрайта метода stop(); нет.
|
|
|||||
Регистрация: Jul 2013
Сообщений: 9
|
Самый простой способ - через ссылку.
|
|
|||||
Регистрация: Mar 2013
Сообщений: 290
|
NoisyFlasher, А-ха, значит FlashDevelop, отлично, так и запишем.
Код сейчас выложу. Там юзается таймер, наверное в этом дело. belv, Нет, в библиотеке у Star тип MovieClip. Код выложен ниже. Mareg, Это какой-то трюк "динамического программирования"? Хотя, по-сути тут тоже идет приведение к типу МувиКлип, насколько я понимаю. Код Star.as: package { import flash.display.MovieClip; import flash.utils.Timer; import flash.events.TimerEvent; public class Star extends MovieClip { private var timer:Timer; public function Star ( ) { timer = new Timer(100, 0); timer.addEventListener(TimerEvent.TIMER, timerListener); timer.start( ); } private function timerListener (e:TimerEvent):void { randomFade( ); } private function randomFade ( ):void { alpha = Math.random(); var starscale:Number = Math.random() * 0.9; scaleX = starscale; scaleY = starscale; x = 150 + 150 * Math.random(); y = 100 + 150 * Math.random(); rotation = Math.random() * 90; } public function dispose ( ):void { timer.stop( ); } } } |
|
|||||
[+1 16.07.13]
[+4 16.07.13] Регистрация: Oct 2005
Сообщений: 217
|
Вот так у меня останавливает анимацию
var mc = getChildAt(i); mc.dispose(); |
|
|||||
Регистрация: Jul 2013
Сообщений: 9
|
Собственно, да. mc.dispose(); Программная анимация и останавливается программно. Таймер, это не стандарт для MovieClip, он добавлен в дочернем классе. Можно конечно сделать таймер public переменной, и стопорить через mc.timer.stop(); , но инкапсуляцией будет правильней.
Я то подумал, что есть Мувклип созданный из-под IDE. Насчет приема - это местная специфика, например можно код писать как и в AS2, через parent, только его нужно преобразовать в Object , хотя так лучше не делать, потому что это шикарнейший полигон для ошибок. |
Часовой пояс GMT +4, время: 10:39. |
|
« Предыдущая тема | Следующая тема » |
Теги |
movieclip , stop() , Мук , ошибка 1061 |
Опции темы | |
Опции просмотра | |
|
|