我正在创建一个网站,其中有一个介绍启动页面等待5秒钟,然后自动将播放头发送到第17帧,如果没有人点击输入按钮执行相同的操作。
我的代码在这里:
function wait(){ 停(); var myInterval = setInterval(function(){ _level0.menu_number2 = 0; gotoAndStop(17); clearInterval(myInterval); },5 * 1000); //停止5秒钟 } 等待();
这一切都很好但是如果我没有等待并且在5秒钟之前我在网站上,我突然在5秒后无意中被带回第17帧。
现在我知道我需要在我的代码结构中查看条件是否在这五秒内发生了变化,即游戏头已超出第15帧,如果是这样的话,不做任何事情,但我不知道这是什么东西是。
请帮忙。
答案 0 :(得分:1)
试试这段代码:它使用一种称为闭包的东西(如果你感兴趣,可以查找)
function wait(){
stop();
var myInterval = setInterval(function(){
_level0.menu_number2 = 0;
gotoAndStop(17);
clearInterval(myInterval);
}, 5*1000); // stop for 5 seconds
return function(){ clearInterval(myInterval); };
}
var abortFunction = wait(); // Calls wait(), interval starts ticking
abortFunction(); // Aborts the interval
您也可以在某处粘贴一个全局变量并检查它,但这只会污染全局命名空间。
答案 1 :(得分:0)
如果他们点击跳过按钮,你可以随时只清除InterInterval(myInterval)。或者不必要地将它包装在函数中:function stopwait(){clearInterval(myInterval); };
要检查您可以使用的帧编号:if(_root._currentFrame< 17)
答案 2 :(得分:0)
从Flash Player 8开始,有一个名为 setTimeOut 的内部函数可用于实现暂停。我在内部假设它是setInterval等的包装器。它的工作原理如下:
function onContinue( message )
{
trace("continue saying: " + message);
}
setTimeOut( onContinue, 1000, "hello" );
第一个参数是要调用的函数。第二个参数是以毫秒为单位的等待时间(1000 = 1秒),第三个参数是可选的,可用于将值传递给回调。
答案 3 :(得分:0)
以为我应该更新这个问题,因为我之前有点过早。
经过一些测试后,我发现Zenazn的代码需要额外的一些,所以我添加了Eric Muyser的_currentFrame系列,现在一切正常,所以再次感谢所有人。
这是Actionscript:
function wait(){
stop();
var myInterval = setInterval(function(){
if(_currentFrame < 15){//This statement checks to see if the play head has moved past frame 15
gotoAndStop(17);
}
clearInterval(myInterval);
}, 5*1000); // stop for 5 seconds
return function(){ clearInterval(myInterval); };
}
var abortFunction = wait(); // Calls wait(), interval starts ticking
答案 4 :(得分:0)
您可以使用tweenlite库http://blog.greensock.com/tweenliteas2/
TweenLite.delayedCall(delay:Number, onComplete:Function)
然后如果有人跳过这个,你可以打电话
TweenLite.killDelayedCallsTo(function:Function)
杀死了原来的delayedCall。
非常容易和强大。
希望有所帮助, 约什