簡體   English   中英

如何在按住鍵的同時阻止對象移動

[英]How to stop object from moving while key is still pressed

我是Java編程的初學者,我正在制作一個應用程序,要求對象在充滿正方形的網格周圍移動。

對象一次只能移動一個正方形,如果用戶想移動到另一個正方形,則必須再次按下該鍵。 我的移動方法如下:

public void move() {
    x += dx;
    y += dy;
}

我正在使用KeyListener接口來實現keyPressed,keyTyped和keyReleased方法,並且我的條件類似於KeyPressed內下面片段中的條件

//KeyPressed
int c = e.getKeyCode();

if (c == KeyEvent.VK_UP) {
    player.setDy(-5);
}

這使對象可以自由移動。 但是,只要按下UP箭頭,它顯然就會繼續移動。

有什么辦法可以使對象說-5一次就移動,然后即使仍然按下該鍵也要停止嗎?

我不確定是否需要更改move方法或KeyListener方法來執行此操作。

我希望我對所要問的問題已經足夠清楚了,對我提出的任何建議,我將深表感謝。

最簡單的方法是添加一個布爾值,以指示按下了移動鍵

類成員: boolean movingKeyPressed = false

在按下的鍵中:

if (movingKeyPressed) {
   return;
} else {
   // do stuff
   movingKeyPressed = true;
}

在關鍵釋放方法中:

movingKeyPressed = false;

首先:如果您從諸如keyPressedkeyReleased之類的偵聽器中調用類方法,則應該使用Synchronization-那是因為可以從多個線程調用偵聽器方法,因此您的類方法( player.setDy() )可以(並且將)被並行調用-您需要確保每次調用setDy都在下一個調用之前進行。

另外: keyTyped在許多情況下要好得多: https : keyTyped

一個示例可能如下所示:

public void keyTyped(KeyEvent arg0) {
   if(arg0.getKeyCode() == KeyEvent.VK_UP)
   {
       synchronized(player)
       {
          player.setDy(-5);
       }
   }
}

這將順序可靠地調用setDy 現在您需要做的就是確保setDy可以按預期工作,因此僅設置一次位置

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM