|
|
|||||
Регистрация: May 2010
Адрес: Киев
Сообщений: 62
|
Как сделать анимацию для 2-х фигур?
Добрый день!
Помогите разобраться со следующей проблемой. Есть класс MyRectangle, который рисует прямоугольник. Есть базовый класс Brush(), который создает программированную анимацию для данного прямоугольника. Допустим, движение по горизонтали. {//часть кода figure:MyRectangle=new MyRectangle(); addChild(figure); addEventListener(Event.ENTER_FRAME,enterFrameListener); } function enterFrameListener(e:Event):void{ //часть кода, которая будет двигать прямоугольник по горизонтали } Я думаю, что нужно сделать Timer, который будет через некоторое время запускать 2 прямоугольник. |
|
|||||
Регистрация: Jun 2006
Адрес: Москва
Сообщений: 461
|
Правильно думаете... еще можно использовать setTimeout.
|
|
|||||
Для анимации используйте твинеры. В флеше есть класс Tween, но он, мягко говоря, не очень.
Советую вам вот это: http://www.greensock.com/ Там кстати проблема с запуском второй анимации с некоторым промежутком решается за 2! строчки. Добавлено через 5 минут Hidest, ну как бы все советуют таймер. В доках вроде написано даже. А один очень уважаемый мной (и не только мной) человек написал на этом форуме: Цитата:
|
|
|||||
Регистрация: May 2010
Адрес: Киев
Сообщений: 62
|
Hidest, использовать функцию setTimeout? Можете показать на моем примере. Что-то я совсем не до пру.
Возможно так: {//часть кода figure:MyRectangle=new MyRectangle(); addChild(figure); addEventListener(Event.ENTER_FRAME,enterFrameListener); //запуск setTimerout var intervalId:uint = setTimeout(beginTimer,1000); } function enterFrameListener(e:Event):void{ //часть кода, которая будет двигать прямоугольник по горизонтали } function beginTimer():void{ figure:MyRectangle=new MyRectangle(); addChild(figure); } Последний раз редактировалось OnEg1n; 25.05.2010 в 15:14. |
|
|||||
Регистрация: Jun 2006
Адрес: Москва
Сообщений: 461
|
Вот вам пример из хелпа, с передачей параметров в функцию (может, потом пригодится)
package { import flash.display.Sprite; import flash.utils.*; public class SetTimeoutExample extends Sprite { private var delay:Number = 1000; // delay before calling myDelayedFunction public function SetTimeoutExample() { var intervalId:uint = setTimeout(myDelayedFunction, delay, "Hello", "World"); } public function myDelayedFunction():void { trace(arguments[0] + " " + arguments[1]); } } } // делаем первую фигуру и запускаем ее анимацию figure1:MyRectangle=new MyRectangle(); addChild(figure1); figure1.addEventListener(Event.ENTER_FRAME,enterFrameListener); // делаем вторую фигуру, но пока не анимируем. figure2:MyRectangle=new MyRectangle(); addChild(figure2); //запуск setTimerout var intervalId:uint = setTimeout(beginTimer,1000); function beginTimer():void{ //подписываем вторую фигуру на ENTER_FRAME - запускаем анимацию figure2.addEventListener(Event.ENTER_FRAME,enterFrameListener); } function enterFrameListener(e:Event):void{ //часть кода, которая будет двигать прямоугольник по горизонтали } setTimeout удобен только в случае, если нужен одноразовый делэй, в остальных лучше пользоваться таймером, ну или твинерами, как было сказано выше. Последний раз редактировалось Hidest; 25.05.2010 в 15:37. |
|
|||||
Регистрация: May 2010
Адрес: Киев
Сообщений: 62
|
Hidest, спасибо. Получается, что в функции-приемнике enterFrameListener, нужно прописывать алгоритм движения для каждой фигуры отдельно?
|
|
|||||
Регистрация: Jun 2006
Адрес: Москва
Сообщений: 461
|
Зачем... пусть у вас просто есть перемещение по х...
Этим-то и удобно, подписываться на ENTER_FRAME не у родителя, а у каждого из детей. А потом делайте хоть 100 своих фигур - код в хэндлере будет одинаков для всех. |
|
|||||
Регистрация: May 2010
Адрес: Киев
Сообщений: 62
|
Hidest, можете еще объяснить строчу
что значит .target и as? Добавлено через 6 минут т.е. в справочнике написано target Целевой объект события. Но как-то мне не понять |
Часовой пояс GMT +4, время: 23:22. |
|
« Предыдущая тема | Следующая тема » |
|
|