當前我正在使用Java編寫一個關卡編輯器。 級別在JPanel中。在這個JPanel裏面,我把遊戲元素(英雄,敵人,樹,牆..)用於每個元素,我使用class.GameElement。JPanel中的JPanel不會監聽KeyListener
public class GameElement extends JPanel
{
protected int posX, posY;
private Color color;
public GameElement(int x, int y, Color color)
{
this.posX = x;
this.posY = y;
this.color = color;
}
public void paintComponent(Graphics g)
{
super.paintComponent(g);
g.setColor(color);
g.fillRect(0, 0, 50, 50);
}
}
GameElement類也是一個JPanel。我希望遊戲元素的英雄可以通過使用KeyListener來移動。
import java.awt.Color;
import java.awt.event.*;
public class Hero extends Entity implements KeyListener
{
public Hero(int x, int y, Color color)
{
super(x, y, color);
this.setFocusable(true);
this.addKeyListener(this);
}
public void keyPressed(KeyEvent k)
{
if(k.getKeyCode() == KeyEvent.VK_UP)
{
this.move(0, -1);
}
else if(k.getKeyCode() == KeyEvent.VK_DOWN)
{
this.move(0, 1);
}
else if(k.getKeyCode() == KeyEvent.VK_LEFT)
{
this.move(-1, 0);
}
else if(k.getKeyCode() == KeyEvent.VK_RIGHT)
{
this.move(1, 0);
System.out.println("test");
}
}
public void keyTyped(KeyEvent k)
{
}
public void keyReleased(KeyEvent k)
{
}
}
當我啓動關卡編輯器。英雄顯示在我的屏幕上成功,但當我按下按鍵時它不會移動。是不是因爲我不專注於正確的JPanel?
對於遊戲,您可能需要註冊一個全局密鑰偵聽器,以確保始終獲得關鍵事件。有這樣的幾個問題,例如:http://stackoverflow.com/questions/4780910/jpanel-keylistener – Ash
http://stackoverflow.com/a/10603588/1360074「KeyListener不指定用於偵聽的鍵盤事件的Swing JComponents,使用KeyBindings,而不是「 –
可能重複[類擴展KeyListener不響應按鍵](http://stackoverflow.com/questions/14221458/class-extending-keylistener-not-responding-to-按鍵) –