Форум 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=137403)

firuz 12.03.2010 17:03

Пауза выполнения кода
 
Собствено сабж.
Форум почитал, поиском попользовался. Кое-что нашел. Но для себя решения так и не нашел. Опыта маловато. Однако нужно решить задачу

Код AS3:

function play_m5(e:Event):void {
kulisi.play();
gotoAndPlay("go_m5");
}

Эта функция работает. Все хорошо.

Но внутри функции мне надо осуществить задержку выполнения кода. Между kulisi.play(); и gotoAndPlay("go_m5");. Хочу сделать задержку 2 секунды.
Понимаю что во Флеше этим почти никто не пользуется. Но у меня уж такая задача. Иначе мне сейчас никак. Помогите, плиз

Добавлено через 1 минуту
Про таймеры начитался, но как ими нормально воспользоваться, пока не разобрался.

Rzer 12.03.2010 17:17

Код AS3:

package ru.atflash.utils {
 
        import flash.display.Sprite;
        import flash.events.Event;
        import flash.utils.getTimer;
 
        /**
        * Реализует задерженные вызовы
        * @author rzer
        * @version 1.0
        */

        public class AtDelayedCalls
        {
 
                private static var timeCalls:Array = [];
 
                private static var eventflow:Sprite;
 
                /**
                * Откладывает вызов функции, на некоторое время.
                *
                * @param        func                Function        Функция, вызов которой откладывается
                * @param        args                Array                Аргументы функции
                * @param        after                uint                Задержка перед вызовом (при значении 0 - через один кадр)
                * @param        alwaysAdd        Boolean                Добавление происходит, даже если такая функция уже в стеке
                * @param        resetTimer        Boolean                Обнуляется ли таймер после добавления
                */

                public static function doLater(func:Function, args:Array = null, after:uint = 0, alwaysAdd:Boolean = false, resetTimer:Boolean = false):void {
 
                        if (!eventflow) {
                                eventflow = new Sprite();
                                eventflow.addEventListener(Event.ENTER_FRAME, onFrame);
                        }
 
                        var index:int = timeCalls.indexOf(func);
                        var dTime:uint = after + getTimer();
 
                        if (alwaysAdd || index == -1){
                                timeCalls.push(func, args, dTime);
                        }else {
                                if (resetTimer) {
                                        if (index != -1) {
                                                timeCalls[index + 2] = dTime;
                                        }
                                }
                        }
 
                }
 
                public static function forget(func:Function, deleteAll:Boolean = false):void {
 
                        var aFunc:Function;
 
                        for (var i:int = timeCalls.length - 1; i > 0; i = i - 3) {
 
                                aFunc = timeCalls[i - 2];
 
                                if (aFunc == func) {
 
                                        timeCalls.splice(i - 2, 3);
 
                                        if (!deleteAll) {
                                                return;
                                        }
 
                                }
                        }
                }
 
 
                private static function onFrame(e:Event):void {
 
                        var args:Array;
                        var func:Function;
                        var after:uint;
                        var time:uint;
 
                        time = getTimer();
 
                        for (var i:int = timeCalls.length - 1; i > 0; i = i - 3) {
 
                                after = timeCalls[i];
                                args = timeCalls[i - 1];
                                func = timeCalls[i - 2];
 
                                if (after < time) {
                                        timeCalls.splice(i - 2, 3);
                                        func.apply(null,args);
                                }
 
                        }
 
                }
 
 
        }
 
}

Используй AtDelayedCalls.doLater(gotoAndPlay,["go_m5"], 2000);

firuz 12.03.2010 17:22

ого.. все так сложнно?

из этого мне мало понятно как осуществить.. но спасибо

Rzer 12.03.2010 17:35

Это вспомогательный класс, тебе его надо положить в корень твоего проекта в папку ru/atflash/utils/, назвав AtDelayedCalls.as и забыть о том, что он там лежит.

Там где надо, делаешь нужный импорт:
Код AS3:

import ru.atflash.utils.AtDelayedCalls;

И делаешь задержку одной строчкой:
Код AS3:

AtDelayedCalls.doLater(gotoAndPlay,["go_m5"], 2000);


firuz 12.03.2010 17:44

так. Я правильно понял? В папке где лежит project.fla нужно разместить файл следующего вложения:
.../ru/atflash/utils

или где-то в самом корне Adobe?

Rzer 12.03.2010 17:46

Всё правильно (где лежит project.fla)

firuz 12.03.2010 17:49

А для этого обязательно содавать именно проект во флеше?
Или имея только fla-файл сделать в его папке нужно вложение и все заработает.
Ну сейчас попробую

Добавлено через 42 секунды
обоже! как криво написал..

Rzer 12.03.2010 17:52

Файл текстовый AtDelayedCalls.as. Относительно project.fla он лежит в папке ru/atflash/utils/

firuz 12.03.2010 17:54

Сказочно!! Все работает! Ура! Спасибо


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

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