这不在一个函数中 - 答案:“如何在 AS2 和 3 中等待 X 秒”
...不使用 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);
}