Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 25.05.2010, 12:53
OnEg1n вне форума Посмотреть профиль Отправить личное сообщение для OnEg1n Найти все сообщения от OnEg1n
  № 1  
Ответить с цитированием
OnEg1n
 
Аватар для OnEg1n

Регистрация: May 2010
Адрес: Киев
Сообщений: 62
По умолчанию Как сделать анимацию для 2-х фигур?

Добрый день!
Помогите разобраться со следующей проблемой. Есть класс MyRectangle, который рисует прямоугольник. Есть базовый класс Brush(), который создает программированную анимацию для данного прямоугольника. Допустим, движение по горизонтали.

Код AS3:
{//часть кода 
figure:MyRectangle=new MyRectangle();
addChild(figure);
addEventListener(Event.ENTER_FRAME,enterFrameListener);
}
 
function enterFrameListener(e:Event):void{
//часть кода, которая будет двигать прямоугольник по горизонтали
}
Каким образом сделать так что бы запустить анимацию для 2-х прямоугольников. Однако, не сразу, сначала один, а, через некоторое время, другой.
Я думаю, что нужно сделать Timer, который будет через некоторое время запускать 2 прямоугольник.

Старый 25.05.2010, 14:04
Hidest вне форума Посмотреть профиль Отправить личное сообщение для Hidest Найти все сообщения от Hidest
  № 2  
Ответить с цитированием
Hidest
 
Аватар для Hidest

Регистрация: Jun 2006
Адрес: Москва
Сообщений: 461
Правильно думаете... еще можно использовать setTimeout.

Старый 25.05.2010, 14:07
incvizitor вне форума Посмотреть профиль Отправить личное сообщение для incvizitor Найти все сообщения от incvizitor
  № 3  
Ответить с цитированием
incvizitor
 
Аватар для incvizitor

блогер
Регистрация: Sep 2008
Адрес: Менск
Сообщений: 586
Записей в блоге: 1
Отправить сообщение для incvizitor с помощью Skype™
Для анимации используйте твинеры. В флеше есть класс Tween, но он, мягко говоря, не очень.

Советую вам вот это: http://www.greensock.com/

Там кстати проблема с запуском второй анимации с некоторым промежутком решается за 2! строчки.

Добавлено через 5 минут
Hidest, ну как бы все советуют таймер. В доках вроде написано даже. А один очень уважаемый мной (и не только мной) человек написал на этом форуме:

Цитата:
Не используйте setTimeout - используйте Timer. setTimeout там просто для красоты, чтобы соответствовать какой-то никому теперь не нужной бумажке.
Хотя не все так думают

Старый 25.05.2010, 15:03
OnEg1n вне форума Посмотреть профиль Отправить личное сообщение для OnEg1n Найти все сообщения от OnEg1n
  № 4  
Ответить с цитированием
OnEg1n
 
Аватар для OnEg1n

Регистрация: May 2010
Адрес: Киев
Сообщений: 62
Hidest, использовать функцию setTimeout? Можете показать на моем примере. Что-то я совсем не до пру.
Возможно так:

Код AS3:
{//часть кода 
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.
Старый 25.05.2010, 15:33
Hidest вне форума Посмотреть профиль Отправить личное сообщение для Hidest Найти все сообщения от Hidest
  № 5  
Ответить с цитированием
Hidest
 
Аватар для Hidest

Регистрация: Jun 2006
Адрес: Москва
Сообщений: 461
Вот вам пример из хелпа, с передачей параметров в функцию (может, потом пригодится)

Код AS3:
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]);
        }
    }
}
Применительно к вашему коду:
Код AS3:
addEventListener(Event.ENTER_FRAME,enterFrameListener);
нужно делать в функции beginTimer, иначе сразу начнет отрабатываться ENTER_FRAME.

Код AS3:
// делаем первую фигуру и запускаем ее анимацию
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{
//часть кода, которая будет двигать прямоугольник по горизонтали
}
соответственно в хэндлере enterFrameListener доступ к объекту для его анимации делаете через e.target, чтобы анимировался именно нужный объект.

setTimeout удобен только в случае, если нужен одноразовый делэй, в остальных лучше пользоваться таймером, ну или твинерами, как было сказано выше.


Последний раз редактировалось Hidest; 25.05.2010 в 15:37.
Старый 25.05.2010, 15:38
OnEg1n вне форума Посмотреть профиль Отправить личное сообщение для OnEg1n Найти все сообщения от OnEg1n
  № 6  
Ответить с цитированием
OnEg1n
 
Аватар для OnEg1n

Регистрация: May 2010
Адрес: Киев
Сообщений: 62
Hidest, спасибо. Получается, что в функции-приемнике enterFrameListener, нужно прописывать алгоритм движения для каждой фигуры отдельно?

Старый 25.05.2010, 15:43
Hidest вне форума Посмотреть профиль Отправить личное сообщение для Hidest Найти все сообщения от Hidest
  № 7  
Ответить с цитированием
Hidest
 
Аватар для Hidest

Регистрация: Jun 2006
Адрес: Москва
Сообщений: 461
Зачем... пусть у вас просто есть перемещение по х...

Код AS3:
function enterFrameListener(event:Event):void
{
    var obj:MyRectangle = event.target as MyRectangle;
 
    obj.x += 5;
}
Этим-то и удобно, подписываться на ENTER_FRAME не у родителя, а у каждого из детей. А потом делайте хоть 100 своих фигур - код в хэндлере будет одинаков для всех.

Старый 25.05.2010, 17:19
OnEg1n вне форума Посмотреть профиль Отправить личное сообщение для OnEg1n Найти все сообщения от OnEg1n
  № 8  
Ответить с цитированием
OnEg1n
 
Аватар для OnEg1n

Регистрация: May 2010
Адрес: Киев
Сообщений: 62
Hidest, можете еще объяснить строчу

Код AS3:
event.target as
что значит .target и as?

Добавлено через 6 минут
т.е. в справочнике написано target Целевой объект события. Но как-то мне не понять

Старый 25.05.2010, 17:35
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 9  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Это называется кастомизацией. Нужна, чтобы логически обозначать, что есть e.target. Плюс это вызывает автокомплит. Во всяком случае в FD точно.
__________________
тут я

Старый 25.05.2010, 17:48
gloomyBrain вне форума Посмотреть профиль Отправить личное сообщение для gloomyBrain Найти все сообщения от gloomyBrain
  № 10  
Ответить с цитированием
gloomyBrain
 
Аватар для gloomyBrain

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
Цитата:
target Целевой объект события. Но как-то мне не понять
Тот объект, в коде которого написано dispatchEvent
__________________
...вселенская грусть

Создать новую тему Ответ Часовой пояс GMT +4, время: 23:22.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 23:22.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.