2014-02-19 34 views
0

我想在Flash中製作我的第一款遊戲,它將被稱爲行人跑步。這裏的搖滾樂會向玩家進發,並且應該以一致的速度進行,但是,每次它重新回到起點時,速度會越來越快。有沒有什麼辦法可以解決這個問題,因爲我不能爲我的生活弄清楚這一點。任何幫助表示讚賞。以下是pastebin上的代碼: Pedestrian Run Code隨着時間的推移,Flash Sprite變得更快

+0

歡迎(因此)。請在問題中包含代碼。將其粘貼到問題中,然後選擇所有代碼並按下'ctrl-k'。 –

回答

0

請勿對rock.x更新使用常量值。每次「重置」時使用一個變量並更新它。

請注意在下面的例子中,我在更新你之前的磐石之後進行更新。

private var speed:Number = 15; 

function moveRock():void { 
     rock.x -= speed; 
     if (rock.x == char.x || rock.x == 0) { 
       this.removeChild(rock); 
       speed += 1; 
       spawnRock(); 
     } 
     setTimeout(moveRock, 25); 
} 
1

我認爲遞歸函數中的setTimeout是一個非常糟糕的想法,這可能是導致您的問題的原因。對遊戲循環使用ENTER FRAME事件。

1

@Iansen是正確的,你的問題是由setTimeout不斷被調用引起的。

在你的moveRock()你有一個setTimeout到moveRock。你的setTimeouts正在積累,這就是爲什麼你看到翻譯增加。

這將是最好的,如果你使用的計時器來代替,就像這樣:

在你的職業等級的變量:

private var moveTimer:Timer; 

在你init()補充一點:

moveTimer = new Timer(25,0); 
moveTimer.addEventListener(TimerEvent.TIMER, moveRock); 
//you can call the moveTimer.start() anywhere you want, but this is fine 
moveTimer.start(); 

然後你moveRockspawnRock應該看起來像這樣:

private function moveRock(e:TimerEvent):void { 
    rock.x -= 15; 
    if (rock.x == char.x || rock.x == 0) { 
     removeChild(rock); 
     spawnRock(); 
    } 
} 

private function spawnRock():void { 
    addChild(rock); 
    rock.x = 750; 
    rock.y = 520; 
} 

還值得一提的是,removeChild之和的addChild是相當浪費在這裏你當前的代碼,你會是罰款只是moveRock()稍有改變:

private function moveRock(e:TimerEvent):void { 
    rock.x -= 15; 
    if (rock.x == char.x || rock.x == 0) { 
     rock.x = 750; 
     rock.y = 520; 
    } 
} 
相關問題