首先,我将发布我的代码 - 底部有更多解释。
这是第一堂课,Player
。
package main;
import main.Screen;
import main.Keyboard;
public class Player extends Mob {
private Keyboard input = new Keyboard();
private int color = 0x0066CC;
private int xPos = 50;
private int yPos = 50;
private int xSize = 10;
private int ySize = 10;
public Player() {
}
public void render(Screen screen) {
screen.addSquare(xPos, yPos, xSize, ySize, color);
return;
}
public void update() {
this.input.update();
if (input.up == true) {
xPos = xPos + 1;
}
System.out.println("xPos is " + xPos);
}
}
这是第二节课,Keyboard
。
package main;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
public class Keyboard implements KeyListener {
private boolean[] keys = new boolean[120];
public boolean up, down, left, right;
public void update() {
System.out.println("Reached 3");
up = keys[KeyEvent.VK_UP] || keys[KeyEvent.VK_W];
down = keys[KeyEvent.VK_DOWN] || keys[KeyEvent.VK_S];
left = keys[KeyEvent.VK_LEFT] || keys[KeyEvent.VK_A];
right = keys[KeyEvent.VK_RIGHT] || keys[KeyEvent.VK_D];
System.out.println("up " + up + ", down " + down + ", left " + left + ", right " + right);
}
public void keyPressed(KeyEvent e) {
keys[e.getKeyCode()] = true;
}
public void keyReleased(KeyEvent e) {
keys[e.getKeyCode()] = false;
}
public void keyTyped(KeyEvent e) {
}
}
我们有它。问题在于键盘类 - 无论我做什么,它都无法根据键更新布尔值。
(Player.update()
方法的调用频率与计算机一样频繁,更新时不会出错。)
我很乐意澄清所需的一切。
谢谢!
答案 0 :(得分:0)
boolean
值未被更改,因为KeyListener
类中未注册Player
。
如果您查看KeyEvent API,您会找到关于重要事件的以下说明:
此低级事件由组件对象(例如 按下,释放或键入键时的文本字段。活动是 传递给注册的每个KeyListener或KeyAdapter对象 使用组件的addKeyListener方法接收此类事件。 (KeyAdapter对象实现了KeyListener接口。)每个都是这样 侦听器对象在事件发生时获取此KeyEvent。
基本上它声明为了发生这些关键事件,你需要使用KeyListener or
KeyAdapter`注册它们。
在这个link中,你会发现这些事件的很好用法。