亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

帶鍵綁定的線程

帶鍵綁定的線程

我對Java圖形和線程很陌生,我正在嘗試制作一個游戲(特別是Pong)。這個想法是兩個人可以在同一個鍵盤上玩(也就是說,有兩個槳通過不同的鍵控制)。目前,兩名球員不能同時移動他們的槳。有解決辦法嗎?答案是分開的線程嗎?如果可能的話,我希望這些槳能同時移動(至少看起來是這樣)。最新情況:似乎使用了Set<Integer>存儲按下的鍵是最好的選擇。我已經這樣做了(而且工作正常),但我想知道這些代碼中是否有任何代碼不在事件分派線程(EDT)上,以及是否需要使用SwingUtilities.invokeLater();..以下是必要的代碼:private Set<Integer> keysDown = Collections.synchronizedSet(new HashSet<Integer>());public void keyPressed(KeyEvent e) {     keysDown.add(e.getKeyCode());}public void keyReleased(KeyEvent e) {         keysDown.remove(e.getKeyCode());}public void updatePaddlePositions(){     if (keysDown.contains(KeyEvent.VK_W))          paddleOne.move(-PADDLE_MOVE_INCREMENT);     if (keysDown.contains(KeyEvent.VK_S))         paddleOne.move(PADDLE_MOVE_INCREMENT);     if (keysDown.contains(KeyEvent.VK_UP))         paddleTwo.move(-PADDLE_MOVE_INCREMENT);     if (keysDown.contains(KeyEvent.VK_DOWN))         paddleTwo.move(PADDLE_MOVE_INCREMENT);     try {         Thread.sleep(DELAY);     } catch (InterruptedException e) {         System.out.println("You Interrupted the game!");     }     canvas.repaint();}這是paintComponent方法canvas目的:public void paintComponent(Graphics g) {     super.paintComponent(g);     paddleOne.paint(g);     paddleTwo.paint(g);     updatePaddlePositions(); // Does this need to be SwingUtilities.invokeLater(this)?                              // And should updatePaddlePositions() be run() as a result?}這是paint方法paddleOne和paddleTwo物體:    public void paint(Graphics g)     {         g.setColor(Color.BLACK);         g.fillRect(x, y, PADDLE_WIDTH, PADDLE_HEIGHT);     }如果有什么對你來說是“壞”的東西,請隨意評論我的設計。最后,什么是Collections.synchronizedSet(new HashSet<Integer>())刻薄/做?更新2:鍵綁定似乎是要走的路(即使在這種情況下,它們需要更多的代碼)。是什么使鍵綁定更好?是因為它們與其他東西分開工作(而不像關鍵偵聽器那樣需要窗口焦點)嗎?另外,我知道HashSet<Integer>的子類Set<Integer>,但它的目的是什么呢?Collections.synchronizedSet(...)?我假設它與線程有關,但我不知道為什么這個程序需要它(如果有的話)。
查看完整描述

3 回答

?
牧羊人nacy

TA貢獻1862條經驗 獲得超7個贊

這可能是提供給KeyListener..看見如何編寫關鍵偵聽器和KeyEventDemo別忘了requestFocusInWindow()..還可以考慮為一個播放器提供鍵盤控制,而為另一個播放器提供鼠標控制。


查看完整回答
反對 回復 2019-07-13
?
蠱毒傳說

TA貢獻1895條經驗 獲得超3個贊

我仍然對反?,F象感到困惑例我在那里列舉了你的例子;顛簸。HashSet<String>實施Set<String>..放任getMask()返回aSet<String>,如果需要的話,您可以自由選擇不同的實現。打電話的人可能只關心Set而不是它是如何實現的。

查看完整回答
反對 回復 2019-07-13
  • 3 回答
  • 0 關注
  • 445 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號