2011-05-04 96 views
0

我正在寫一個遊戲,並試圖使用箭頭鍵移動一個人。代碼按下按鈕

我有這樣的代碼

if (Key_Down(DIK_DOWN)) 
{movedown(player)} 

這工作,但我希望玩家把每一個鍵按下時,我創建和動畫循環四個步驟。所以玩家不能輸入任何更多的移動命令,直到動畫結束,他們已經採取了四個步驟來製作代碼。

if(player.move == false) 
{ 
if (Key_Down(DIK_DOWN)) 
{movedown(player)} 
} 

現在的問題是,現在一旦按下按鈕,程序就會像按住按鈕一樣繼續移動,直到按下另一個方向。

任何人都可以解釋外循環做了什麼代碼和解決問題?

它是在Visual C++ 2005和編程的Direct X 9.C

編輯:

如果我刪除了外環,然後按下按鈕只能註冊一次,所以我不認爲這是移動功能。

+1

moveDown裏面的代碼是什麼樣的? – rzetterberg 2011-05-04 12:07:41

+0

@Ancide world.x + 16 – Skeith 2011-05-04 12:10:35

回答

1

只需跟蹤變量中的關鍵狀態。所以你可以重置一個移動計數器。類似這樣,結合兩者:

int MovingDown = 0; 
... 
if (!Key_Down(DIK_DOWN)) MovingDown = 0; 
else if (MovingDown < 4) { 
    MovingDown++; 
    movedown(player); 
} 
+0

我曾嘗試過,但它仍然執行if移動時的語句內容大於4.我也有一個hack,其中移動函數檢查player.move是否爲false,但這會導致處理器時間,因爲函數需要在每個循環中調用每個對象是否應該是。 – Skeith 2011-05-04 12:59:11

+1

我喜歡我的C++版本比你的更好,至少如果()語句在我使用它們時表現可預測。 – 2011-05-04 13:11:43

+0

它只是一個嵌套的if語句時纔會出現問題 – Skeith 2011-05-04 13:16:12

0

很難說沒有看到更多的代碼庫,但我猜你在移動播放器後不會重新設置player.move。你有沒有嘗試在那裏粘貼一些休息點來看看被調用的內容,爲什麼?

如果您刪除if(player.move == false)行,它是否有同樣的問題? ..或者你在其他地方改過什麼了嗎?如果你能發佈更多的代碼庫的喜歡整下移功能和anythnig否則其交互(例如動畫代碼),這將有助於我們幫助您......

[編輯]是下移的宏?也許你有一些特殊的副作用從那裏消失?如果沒有,函數調用後它應該有一個分號。

KEY_DOWN返回什麼?這是一個API調用?嘗試根據您期望它返回的確切值進行測試?

+0

我正在重置player.move,我有突破指出它。一切都按照我的邏輯工作,但是一旦if(Key_Down(DIK_DOWN))語句被讀取爲真,一旦它永遠從那一點開始執行,無論如何。 – Skeith 2011-05-04 12:18:52

+0

那麼使用if語句沒什麼問題。你在這裏看到的神器將會由其他東西引起。如果你不準備發佈更多的代碼,恐怕在黑暗中我們可以提供更多的刺傷。 – 2011-05-04 15:26:40