下面是我一直在制作的小程序,它允许用户使用箭头键在屏幕上移动矩形。除向下键外,所有键都有效,向下键使矩形沿对角线向右下移动。答案可能是显而易见的;希望不是!请帮忙!谢谢!
import javax.swing.*;
import java.applet.Applet;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.net.URL;
import java.util.ArrayList;
import javax.imageio.ImageIO;
public class Move extends Applet implements KeyListener {
private Rectangle rect;
private ArrayList<Integer> keysDown;
public void init() {
this.addKeyListener(this);
keysDown = new ArrayList<Integer>();
rect = new Rectangle(0, 0, 50, 50);
}
public void paint(Graphics g) {
setSize(600, 400);
Graphics2D g2 = (Graphics2D)g;
g2.fill(rect);
}
@Override
public void keyPressed(KeyEvent e) {
if (!keysDown.contains(e.getKeyCode()))
keysDown.add(new Integer(e.getKeyCode()));
moveRect();
}
@Override
public void keyReleased(KeyEvent e) {
keysDown.remove(new Integer(e.getKeyCode()));
}
public void moveRect() {
int x = rect.x;
int y = rect.y;
if (keysDown.contains(KeyEvent.VK_UP)) {
y -= 2;
}
if (keysDown.contains(KeyEvent.VK_DOWN)) {
y += 2;
}
if (keysDown.contains(KeyEvent.VK_LEFT)) {
x -= 2;
}
if (keysDown.contains(KeyEvent.VK_DOWN)) {
x += 2;
}
rect.setLocation(x, y);
repaint();
}
@Override
public void keyTyped(KeyEvent e) {
}
}
最佳答案
您在处理按键的 moveRect
中的 if 语句中是否缺少 VK_RIGHT
?
我看到您有两个 VK_DOWN
- 当您按下向下键时,这将沿 X 和 Y 移动矩形。
仔细查看 moveRect
方法中的这些行,并注意 VK_DOWN
是如何被处理两次的(并且 VK_RIGHT
根本没有被处理) ):
if (keysDown.contains(KeyEvent.VK_UP)) {
y -= 2;
}
if (keysDown.contains(KeyEvent.VK_DOWN)) {
y += 2;
}
if (keysDown.contains(KeyEvent.VK_LEFT)) {
x -= 2;
}
if (keysDown.contains(KeyEvent.VK_DOWN)) {
x += 2;
}
关于java - 小程序中的按键故障,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20600827/