Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Работа с циклом for (http://www.flasher.ru/forum/showthread.php?t=165432)

DarkKnight2009 23.08.2011 00:17

Работа с циклом for
 
Здравсвуйте.
Подскажите пожалуйста.
Есть массив координат и есть функия, которая должна в цикле проходить по массиву и вызывать анимацию для каждой ячейки, но у мея почему то вызывается только последняя ячейка.
Код AS3:

var speedCoords:Array = [195, 235, 310, 335];
var speedMax:int = speedCoords.length;
var transmission:int = 0;
var i:int = 0;
 
addEventListener(Event.ENTER_FRAME, onLoop, false, 0, true);
function onLoop(event:Event):void
{
        for(i; i < speedMax; i ++)
        {
                TweenMax.to(spd_mc, 4, {shortRotation:{rotation:speedCoords[i]}});
        }
}

Что не так, как исправить код?
Подскажите пожалуйста

GBee 23.08.2011 00:28

Так не успевает выполнить первые три анимации. Создайте последовательность в цикле, а потом запускайте, но в ентерфрейме все это делаете, опять вряд ли успеет.

Котяра 23.08.2011 00:32

Тут энтерфрэйм не нужен и каждый следующий твин надо запускать по окончанию предыдущего, делать цепочку твинов.

DarkKnight2009 23.08.2011 00:35

Я не совсем понял. можно пример?

Добавлено через 2 минуты
Цитата:

Сообщение от Котяра (Сообщение 1024610)
Тут энтерфрэйм не нужен и каждый следующий твин надо запускать по окончанию предыдущего, делать цепочку твинов.

А как же мне без цикла, мне ведь нужно по массиву проходить?
А в противном случае прийдется лепить 4 строки подряд одной анимации, или я ошибаюсь ?
Можно пример?

Добавлено через 20 минут
Цитата:

Сообщение от GBee (Сообщение 1024609)
Так не успевает выполнить первые три анимации. Создайте последовательность в цикле, а потом запускайте, но в ентерфрейме все это делаете, опять вряд ли успеет.

Если не в Ентерфрейме, тогда где. подскажите пожалуйста?

silin 23.08.2011 00:59

нет под рукой TweenMax'а
есть http://code.google.com/p/eaze-tween/, но суть та же:
Код AS3:

var speedCoords:Array = [195, 235, 310, 335];
var speedMax:int = speedCoords.length;
 
PropertyShortRotation.register();
var tween:EazeTween = new EazeTween(spd_mc);
for (var i:int = 0; i < speedMax; i++)
{
        tween.to(4).short(speedCoords[i]);
}


DarkKnight2009 23.08.2011 01:02

Цитата:

Сообщение от silin (Сообщение 1024620)
нет под рукой TweenMax'а
есть http://code.google.com/p/eaze-tween/, но суть та же:
Код AS3:

var speedCoords:Array = [195, 235, 310, 335];
var speedMax:int = speedCoords.length;
 
PropertyShortRotation.register();
var tween:EazeTween = new EazeTween(spd_mc);
for (var i:int = 0; i < speedMax; i++)
{
        tween.to(4).short(speedCoords[i]);
}


Разве в твинмаксе с rotation такое проканает?

GBee 23.08.2011 01:26

Почитайте про TimelineLite.append или TimelineMax.append http://www.greensock.com/as/docs/tween/ слева найдете.

silin 23.08.2011 01:28

упс, я извиняюсь, но и EazeTween, то что я написал через цикл что-то не совсем внятное дает
хотя вот так нормально все:
Код AS3:

eaze(spd_mc).to(4).short(195).to(4).short(235).to(4).short(310).to(4).short(335);

про твинмакс не могу сказать, нету

UPD: с "нанизыванием" твинов в цикле затык был в том, что следующий твин присоединялся не цепочке, а к исходному
чтобы в цикле это запустить надо на каждой итерации сохранять ссылку на возвращаемую цепочку, т.е.
Код AS3:

PropertyShortRotation.register();
var tween:EazeTween = new EazeTween(spd_mc);
for (var i:int = 0; i < speedMax; i++)
{
        tween=tween.to(4).short(speedCoords[i]);
}


DarkKnight2009 23.08.2011 01:32

Цитата:

Сообщение от silin (Сообщение 1024630)
упс, я извиняюсь, но и EazeTween, то что я написал через цикл что-то не совсем внятное дает
хотя вот так нормально все:
Код AS3:

eaze(spd_mc).to(4).short(195).to(4).short(235).to(4).short(310).to(4).short(335);

про твинмакс не могу сказать, нету

Спасибо большое, но мне нужен именно твинмакс :(

Добавлено через 49 секунд
Цитата:

Сообщение от GBee (Сообщение 1024629)
Почитайте про TimelineLite.append или TimelineMax.append http://www.greensock.com/as/docs/tween/ слева найдете.

Спасибо, сейчас поищу

Aquahawk 23.08.2011 09:55

Ребят вы чего! Тут же i локальная переменная, как я понимаю в функции(кадре). В onLoop она попадёт в замыкание и при новом вызове onLoop сохранит своё старое значение. В начале цикла она не обнуляется. Причём если этот кадр(а это похоже кадр) вызывается несколько раз, то получим наростающее количество обработчиков ентерфрейма.
DarkKnight2009 Запомните, всегда, во всех циклах, обнуляйте счётчик:
Код AS3:

for(i=0; i < speedMax; i ++)

До наложения твинов скорее всего дело не доходит, после первого старта i будет иметь максимальное значение.


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

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