[英]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;
首先:如果您從諸如keyPressed
或keyReleased
之類的偵聽器中調用類方法,則應該使用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.