我想同时移动两个对象。 我想为此使用Thread。但它在run方法中给出了错误。 我怎样才能做到这一点? 如何使用键盘事件执行此操作 喜欢2人游戏吗?
以下是代码:
public class First extends JPanel implements Runnable,KeyListener{
int y1=303/2;
private int vy=0;
public void paintComponent(Graphics g){
g.setColor(Color.BLUE);
g.fillRect(10,y1, 15, 20);
}
public void setVelocity(int v){
vy=v;
}
@Override
public void run() {
int keyCode=e.getKeyCode();
if(keyCode==KeyEvent.VK_UP ){
}
if(keyCode==KeyEvent.VK_S){
}
else if(keyCode==KeyEvent.VK_DOWN){
}
else if(keyCode==KeyEvent.VK_W){
}
try {
Thread.sleep(1000);
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
public static void main(String[] args){
JFrame jf=new JFrame();
Panel p=new Panel();
jf.add(p);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.setSize(300,300);
jf.setVisible(true);
}
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyPressed(KeyEvent e) {
}
@Override
public void keyReleased(KeyEvent e) {
}
}
class Second extends JPanel{
int y2=303/2;
private int vy=0;
public void setVelocity(int v){
vy=v;
}
@Override
public void paintComponent(Graphics g){
g.setColor(Color.YELLOW);
g.fillRect(150,y2, 15, 20);
}
}
class Panel extends JPanel{
First f=new First ();
Second s=new Second();
public void paintComponent(Graphics g){
s.paintComponent(g);
f.paintComponent(g);
}
}
答案 0 :(得分:1)
如何使用键盘事件,如2人游戏?
仅为按下的最后一个键生成一个事件,因此基本上您需要跟踪所有按下的键(以及它们被释放时)。
我过去使用Key Bindings
和Swing Timer
完成了此操作。
查看Motion Using the Keyboard中找到的KeyboardAnimation
示例,了解此方法的工作示例。
该链接还将解释Key Bindings
是什么以及为什么它们应优先于KeyListener。