ЭТО НЕ В ОДНОЙ ФУНКЦИИ - ОТВЕТЫ: «Как ждать Х секунд в AS2 & 3»
... без с использованием setInterval или clearInterval.
Ответы, опубликованные выше, намного быстрее и проще в использовании. Я разместил это здесь, на всякий случай ...
Иногда вы не сможете использовать set
/ clearInterval
или другие методы, основанные на ограничениях разработки. Вот способ заставить задержку произойти без использования этих методов.
AS2 - Если вы копируете / вставляете приведенный ниже код в вашу временную шкалу, обязательно добавьте на сцену два фрагмента ролика, btnTest
и btnGlowTest
(включая аналогичные имена экземпляров). Увеличьте "btnGlowTest", измените его цвет и добавьте "btnTest" (для имитации свечения и кнопки соответственно).
Скомпилируйте и проверьте панель вывода для операторов трассировки, чтобы увидеть, как работает код. Нажмите на btnTest - btnGlowTest станет видимым на протяжении всей задержки (только для визуального представления).
У меня также есть таймер обратного отсчета onEnterFrame (таймеры остановки / переключения демонстраций).
Если вы хотите, чтобы задержка / свечение были длиннее - увеличьте число glowGameTime
. Измените имена в соответствии со своими потребностями и / или примените логику по-другому.
var startTime:Number = 0;
var currentTime:Number = 0;
var mainTime:Number = 5;//"game" time on enter frame
var glowStartTime:Number = 0;
var glowCurrentTime:Number = 0;
var glowGameTime:Number = 1.8;//"delayed" time on press
btnGlowTest._visible = false;
this.onEnterFrame = TimerFunction;
startTime = getTimer();
function TimerFunction()
{
currentTime = getTimer();
var timeLeft:Number = mainTime - ((currentTime - startTime)/1000);
timeLeft = Math.floor(timeLeft);
trace("timeLeft = " + timeLeft);
if(timeLeft <= 0)
{
trace("time's up...3 bucks off");
//...do stuff here
btnGlowTest._visible = false;//just for show
btnTest._visible = false;//just for show
StopTime();
}
}
function glowTimerFunction()
{
glowCurrentTime = getTimer();
var glowTimeLeft:Number = glowGameTime - ((glowCurrentTime - glowStartTime)/1000);
glowTimeLeft = Math.floor(glowTimeLeft);
//trace("glowTimeleft = " + glowTimeLeft);
if(glowTimeLeft <= 0)
{
trace("TIME DELAY COMPLETE!");
//...do stuff here
btnGlowTest._visible = false;//just for show
btnTest._visible = false;//just for show
StopTime();
}
}
btnTest.onPress = function()
{
trace("onPress");
btnGlowTest._visible = true;
StopTime();
GlowTime();
}
function GlowTime()
{
trace("GlowTime Function");
this.onEnterFrame = glowTimerFunction;
glowStartTime = getTimer();
}
function StopTime()
{
trace(">>--StopTime--<<");
delete this.onEnterFrame;
}
AS3 - Ниже приведен приведенный выше код для настройки в AS3. Существуют разные способы достижения сходных результатов, но в зависимости от масштаба проекта это методы, которые использовались для правильного функционирования.
Если вы копируете / вставляете приведенный ниже код в вашу временную шкалу, обязательно добавьте на сцену два фрагмента ролика, btnTest
и btnGlowTest
(включая похожие имена экземпляров). Увеличьте "btnGlowTest", измените его цвет и добавьте "btnTest" (для имитации свечения и кнопки соответственно).
Скомпилируйте и проверьте панель вывода для операторов трассировки, чтобы увидеть, как работает код. Нажмите на btnTest - btnGlowTest станет видимым на протяжении всей задержки (только для визуального представления).
Если вы хотите, чтобы задержка / свечение были длиннее - увеличьте число GlowTimer:Timer
(в настоящее время установлено на 950). Измените имена в соответствии со своими потребностями и / или примените логику по-другому.
import flash.events.MouseEvent;
import flash.utils.Timer;
import flash.events.TimerEvent;
var startTime:Number = 0;
var currentTime:Number = 0;
var gameTime:Number = 4;//"game" time on enter frame
var GlowTimer:Timer = new Timer(950,0);//"delayed" time on press
btnGlowTest.visible = false;
GlowTimer.addEventListener(TimerEvent.TIMER, GlowTimeListener, false, 0, true);
btnTest.addEventListener(MouseEvent.MOUSE_DOWN, btnTestPressed, false, 0, true);
addEventListener(Event.ENTER_FRAME,TimerFunction, false, 0, true);
startTime = getTimer();
function TimerFunction(event:Event)
{
currentTime = getTimer();
var timeLeft:Number = gameTime - ((currentTime - startTime)/1000);
timeLeft = Math.floor(timeLeft);
trace("timeLeft = " + timeLeft);
if(timeLeft <= 0)
{
trace("time's up, 3 bucks off");
StopTime();
}
}
function GlowTimeListener (e:TimerEvent):void
{
trace("TIME DELAY COMPLETE!");
StopTime();
}
function btnTestPressed(e:MouseEvent)
{
trace("PRESSED");
removeEventListener(Event.ENTER_FRAME, TimerFunction);
btnGlowTest.visible = true;
GlowTimer.start();
}
function StopTime()
{
trace(">>--Stop Time--<<");
btnGlowTest.visible = false;//just for show
btnTest.visible = false;//just for show
GlowTimer.stop();
removeEventListener(TimerEvent.TIMER, GlowTimeListener);
removeEventListener(Event.ENTER_FRAME, TimerFunction);
}