我很親密!我使用的XNA遊戲狀態管理示例發現here並試圖修改它如何處理輸入,所以我可以延遲鍵/創建輸入緩衝區。延遲鍵盤輸入幫助
在GameplayScreen.cs我聲明瞭一個名爲雙和elapsedTime設置等於0
在HandleInput方法我已經改變了與Key.RIGHT按鈕按:
if (keyboardState.IsKeyDown(Keys.Left))
movement.X -= 50;
if (keyboardState.IsKeyDown(Keys.Right))
{
elapsedTime -= gameTime.ElapsedGameTime.TotalMilliseconds;
if (elapsedTime <= 0)
{
movement.X += 50;
elapsedTime = 10;
}
}
else
{
elapsedTime = 0;
}
僞代碼:
如果如果它被按壓右箭頭鍵沒有按下設定elapsedTime爲0時,elapsedTime等於本身減去自上一幀的毫秒。如果差值等於0或更小,則移動對象50,然後將elapsedTime設置爲10(延遲)。
如果該鍵被按下elapsedTime應該永遠不會被通過,否則設置爲0。相反,在成功檢查後,elapsedTime設置爲10後,elapsedTime應該變得越來越低,因爲它將被TotalMilliseconds減去。當它達到0時,它再次成功通過檢查並再次移動對象。
的問題是,它每按移動對象一次,但如果你按住它不工作。任何人都可以提供任何類型的提示/示例/位知識對此?在此先感謝,它一直在讓我瘋狂。理論上我認爲這肯定會奏效。
澄清
想到一個網格,當你對我多麼希望塊移動的思維。它不是在屏幕上流暢地移動,而是沿着它的寬度(按順序跳躍)移動到下一個位置。如果我按住鍵,它會在屏幕上進行比賽。我想減慢整個過程,這樣按住鍵可以在「跳躍」/移動它的寬度之間創建一個X毫秒的延遲。
編輯:原來gameTime.ElapsedGameTime.TotalMilliseconds將返回0 ...所有的時間。我不知道爲什麼。
解決:發現了gameTime.ElapsedGameTime.TotalMilliseconds返航0 ...搬到別的地方。
既不是。我有一個50像素寬的塊,我不想一次移動一個像素......我希望它每次移動它的寬度。問題是,如果我只按住鍵,它移動得非常快。我需要通過計時器來延遲輸入。使用類似.05的東西將無法正常工作=/ 我不想要選項1,因爲這意味着我必須每次按下按鍵。而選項2因爲我所做的第一個陳述而不起作用。 – Stradigos 2010-04-14 19:08:47