簡體   English   中英

限制Java Swing游戲中的玩家移動“速度”

[英]Restrict Player Movement “Speed” in Java Swing Game

我實現了一款游戲,玩家可以在基於圖塊的迷宮中移動精靈。 播放器使用箭頭鍵控制精靈。 我要限制玩家的移動速度,例如,我不希望他們按住箭頭鍵並在屏幕上飛來飛去。 我嘗試通過實施睡眠來解決此問題:

switch (keyCode) {
        case KeyEvent.VK_UP:    // Up arrow key
            if (running) {
                player.Move(1); // Move North
            }
            paintPlayer(getGraphics());
            // So the player can't hold down the arrow key and fly across the screen, force them to wait between inputs
            // BUT this leads to problems if you do hold it down, moves end up in a 'queue'...
            try {
                Thread.sleep(150);
                break;
            } catch (InterruptedException ex) {
                Logger.getLogger(MazeView.class.getName()).log(Level.SEVERE, null, ex);
            }
            break;
// etc.

但這會導致問題,如果您按住箭頭鍵-這些動作似乎最終會陷入某種“排隊”狀態,並且您最終會不斷崩潰,直到從擴展按鍵完成所有動作為止。 有更好的方法嗎?

以前我在做keyPressed()事件,但是正如Riyafa建議的那樣,我將其更改為僅在keyReleased()上觸發,並且做到了。 也無需再包括睡眠。

我建議調查Switng計時器。 顧名思義,它的動作與Key事件偵聽器和所有其他GUI東西在同一線程中執行,因此您可以輕松地在此處繪畫並基於鍵/按鈕狀態更新游戲狀態。 您也可以使用swingutilities.invokelater(new runnable()如果您正在等待另一個線程。我很長時間沒有做Swing並忘記了所有事情,但是我敢肯定,這應該是動態游戲的方式。

暫無
暫無

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

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