Просмотр полной версии : Пауза выполнения кода
Собствено сабж.
Форум почитал, поиском попользовался. Кое-что нашел. Но для себя решения так и не нашел. Опыта маловато. Однако нужно решить задачу
function play_m5(e:Event):void {
kulisi.play();
gotoAndPlay("go_m5");
}
Эта функция работает. Все хорошо.
Но внутри функции мне надо осуществить задержку выполнения кода. Между kulisi.play(); и gotoAndPlay("go_m5");. Хочу сделать задержку 2 секунды.
Понимаю что во Флеше этим почти никто не пользуется. Но у меня уж такая задача. Иначе мне сейчас никак. Помогите, плиз
Добавлено через 1 минуту
Про таймеры начитался, но как ими нормально воспользоваться, пока не разобрался.
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);
ого.. все так сложнно?
из этого мне мало понятно как осуществить.. но спасибо
Это вспомогательный класс, тебе его надо положить в корень твоего проекта в папку ru/atflash/utils/, назвав AtDelayedCalls.as и забыть о том, что он там лежит.
Там где надо, делаешь нужный импорт:
import ru.atflash.utils.AtDelayedCalls;
И делаешь задержку одной строчкой:
AtDelayedCalls.doLater(gotoAndPlay,["go_m5"], 2000);
так. Я правильно понял? В папке где лежит project.fla нужно разместить файл следующего вложения:
.../ru/atflash/utils
или где-то в самом корне Adobe?
Всё правильно (где лежит project.fla)
А для этого обязательно содавать именно проект во флеше?
Или имея только fla-файл сделать в его папке нужно вложение и все заработает.
Ну сейчас попробую
Добавлено через 42 секунды
обоже! как криво написал..
Файл текстовый AtDelayedCalls.as. Относительно project.fla он лежит в папке ru/atflash/utils/
Сказочно!! Все работает! Ура! Спасибо
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.