下面是我一直在制作的applet,它允许用户使用箭头键在屏幕上移动一个矩形。除了向下键之外,所有键都起作用,这使得矩形在对角线中向右下移动。答案可能很明显;希望不是!请帮忙!谢谢!
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) {
}
}
答案 0 :(得分:2)
您在处理按键的VK_RIGHT
中的if语句中是否遗漏了moveRect
?
我看到你有两个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;
}