java突破游戏多键处理
当用户同时按下左键和右键时,我希望我的矩形停止。我研究了多个键处理,但没有找到任何东西
package View;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class GamePanel extends JPanel {
private final int WIDTH = 600, HEIGHT = 500;
// PROPERTIES
private Timer timer;
int x = 0;
int y = 475;
int velX = 0; // only left or right
// CONSTRUCTOR
public GamePanel() {
setSize(WIDTH, HEIGHT);
setBackground(new Color(240, 255, 255));
timer = new Timer(5, new MyTimerListener());
addKeyListener( new MyKeyListener());
setFocusable(true); // for key listening
setFocusTraversalKeysEnabled(false);
timer.start();
}
// METHODS
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor( new Color(201, 51, 51));
g.fillRoundRect(x, y, 80, 20, 15, 15);
}
public class MyTimerListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
if ( x < 0 )
{
velX = 0;
x = 0;
}
if ( x > 520 )
{
velX = 0;
x = 520;
}
x = x + velX;
repaint();
}
}
public class MyKeyListener implements KeyListener {
@Override
public void keyPressed(KeyEvent e) {
int code = e.getKeyCode();
if ( code == KeyEvent.VK_LEFT )
velX = -1;
if ( code == KeyEvent.VK_RIGHT )
velX = 1;
}
@Override
public void keyReleased(KeyEvent e) {
velX = 0;
}
@Override
public void keyTyped(KeyEvent e) {}
}
}
谢谢你的帮助
![两个布偶]
# 1 楼答案
所以再次强调,使用键绑定,而不是键侦听器。您可能希望对左右箭头键的按键和释放使用单独的绑定,并且希望您的按键绑定操作更改程序的状态,从而影响摆动计时器移动拨杆的方式。在这个例子中(借用了我的另一个例子),我创建了一个enum,Direction来封装右方向和左方向,并创建了一个
Map<Direction, Boolean>
来将布尔值与右方向和左方向相关联。按向右箭头键将更改地图,使其将向右方向与true
布尔值相关联,松开键则会执行相反的操作。计时器会对地图进行轮询,查看将划桨移动到哪里。例如: