我有一个小问题。
我做了一个简单的棋盘游戏。用户可以与AI对战。它工作正常。比赛的规则规定,如果有人投掷骰子并制作1或4,他可以再次上场。所以我做了一个for循环。它也有效。 AI播放所需的次数,然后允许P1播放。
我的问题是,典当运动的所有动画同时发生。
例如:AI轮到:4。再次播放:1。再次播放:5。播放器转向。 4&动画1& 5所有同时播放(看起来很奇怪)。我想在AI和第一次投掷之间延迟2秒,以便动画有时间播放。
我读到我应该使用timer
或setInterval
,但我并不知道将它放在循环中的位置和方式。以下是我的代码的示例版本,如果它有帮助:
编辑:更新了代码,感谢下面的答案:
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
}
}
}
}
我希望有人可以帮助我:) 感谢。
答案 0 :(得分:1)
你有很多选择。例如:您可以在动画的时间轴中添加2秒并监听动画结束。或者你删除for循环并在每一步后开始超时。像这样的东西: 写一个方法来决定当前步骤:
function MakeDecision()
{
switch( state ):
case( state1):doSomething1()
case( state2 ):doSomething2()
}
,其中
function doSomething1()
{
..your game code
startTimer for 2s , and call MakeDecision()
}
或者您可以制作游戏循环,定期调用MakeDecision,游戏将仅由州控制