AS3关于定时器和循环
问题描述:
我有一个小问题。 我在做一个简单的棋盘游戏。用户有可能对抗AI。它工作正常。游戏规则规定,如果有人投掷骰子并制作1或4,他可以再次玩。所以我做了一个for循环。它也可以工作。 AI根据需要多次播放,然后允许P1播放。 我的问题是,所有的兵的动作动画发生在同一时间。 示例:AI轮到:4.再次播放:1.再次播放:5.玩家轮流。所有同时播放的动画(看起来很奇怪)。我希望AI和第一次投掷之间有2秒的延迟,以便动画有时间播放。 我读过我应该使用timer
或setInterval
,但我不知道在哪里以及如何将它放置在我的循环中。这里是我的代码样本版本,如果它可以帮助:AS3关于定时器和循环
编辑:更新后的代码,这要归功于以下答案:
function fnTimeOut() {
var intervalId: uint = setTimeout(fnNextPlayer, 2000, null);
}
next.addEventListener(MouseEvent.CLICK, fnNextPlayer);
function fnNextPlayer (e:Event):void{
if (player2.currentFrame == 2) { //AI's turn
randDice=random(1, 6); //dice thrown (have a random function setup already)
if (randDice==1){
//start animation
//move pawns
fnTimeOut(); //restarts the function after 2secs
}
if (randDice==2){
//start animation
//move pawns
player2.gotoAndStop(1); //starts player1's turns
//stop loop because not 1 or 4
}
}
}
}
我希望有人能帮助我:) 感谢。
答
你有很多选择。例如:您可以在动画的时间轴中添加2秒钟,并听取动画结束。或者你删除for循环,并在每个步骤后启动超时。事情是这样的: 写一个方法,将作出决定对当前步骤:
function MakeDecision()
{
switch(state):
case(state1):doSomething1()
case(state2):doSomething2()
}
其中
function doSomething1()
{
..your game code
startTimer for 2s , and call MakeDecision()
}
也可以使一个游戏循环,它将调用MakeDecision在固定的时间,游戏将只能由国家控制
首先,谢谢你的回答。我选择使用超时方法(所以我不必重写大量的代码)。但是,我已经注意到了你提出的代码,并将在我的下一个项目中使用它,因为它看起来比我所做的要好得多:)。我正在更新我的第一篇文章,如果它可以帮助其他人! – Jeryl