Форум Flasher.ru

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

UserSuperPupsik 06.09.2013 19:22

Проблема с циклом!
 
Здравствуйте.Пишу в кадре.Вот фрагмент кода:

Код AS3:

var workStatus:Boolean;
var i:int;
 
workStatus=true;
for(i=1;i<=5;i++){
                      ani(OBJECT,[{y:100, x:100, t:1},{y:200, x:200, t:0.5}],2);
                      }
                        workStatus=false
                        trace(workStatus);

Функция ani() перемещает OBJECT на сцене.Нажимаю ctrl+enter и объект начинает двигаться, выполняется первая итерация,вторая .. , а в выводе уже, раньше времени, появляется false. Но ведь объект еще двигается - значит цикл еще не закончен!!!Вот и вопрос: как заставить инструкции идти не параллельно, а последовательно: как сказать на языке AS3, чтобы: "только после завершения цикла выполняй trace()!?!"

Bletraut 06.09.2013 19:27

Он и выполняется после выполнения цикла, т.к. цикл полностью выполняется за одну интерацию. Если хочешь что бы объект двигался по интерациям, то создавай не цикл, а событие EnterFrame или таймер.

UserSuperPupsik 06.09.2013 20:11

Цитата:

Если хочешь что бы объект двигался по интерациям, то создавай не цикл, а событие EnterFrame.
Извините, Bletraut, можно пример?

Bletraut 06.09.2013 20:21

Код AS3:

var pet:Sprite = new Sprite();
var wStatus:Boolean = true;
var i:int = 0;
 
addEventListener(Event.ENTER_FRAME, update);
 
function update(e:Event):void
{
    if(i < 5)
    {
        ani(pet,[{y:100, x:100, t:1},{y:200, x:200, t:0.5}],2);
        i++;
    }
    else
    {
      wStatus = false;
    }
}


UserSuperPupsik 06.09.2013 21:14

Код рабочий, я добавил в него trace(); и оказалось проблема не решилась: trace() выполняется до завершения цикла!!!Проверьте сами!
Код AS3:

var pet:Sprite = new Sprite();
var wStatus:Boolean = true;
var i:int = 0;
 
addEventListener(Event.ENTER_FRAME, update);
 
function update(e:Event):void
{
    if(i < 5)
    {
        ani(pet,[{y:100, x:100, t:1},{y:200, x:200, t:0.5}],2);
        i++;
    }
    else
    {
      wStatus = false;
      trace(wStatus);
 
  }
}

Цитата:

Как сказать на языке AS3, чтобы: "только после завершения цикла выполняй trace()!?!"

belv 06.09.2013 21:26

Цикл выполняется в Вашем случае полностью в одном кадре.То что Вы написали анимацию в цикле-это не значит, что цикл будет ждать пока произойдет анимация.Работа флешплеера устроена так, пока не будет выполнен код, обновления экрана не будет.

Akopalipsis 06.09.2013 21:53

UserSuperPupsik Скажите что Вы хотите сделать? Трейс срабатывает не тогда когда анимация закончится! А когда i будет равна пяти. В ентер фрайме с частотой 25 кадров в секунду, i будет равняться пяти за одну пятую секунды. Вы же сами такое условие составили! И если Вам нужно, чтобы что то выполнилось именно по завершению анимации, то подпишите анимацию на завершение.
А так Вы ругаетесь на рабочий, вами же созданный код.

Bletraut 07.09.2013 22:44

Цитата:

trace() выполняется до завершения цикла!!!Проверьте сами!
Он выполняется как раз в конце. Возможно те следует почитать основы языка, так как явно требуешь, то что заведомо работает не так как ты думаешь.


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

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