我已经在y轴上跳跃运行正常,但是我希望能够在按下左/右键的同时使用'dx'跳跃(例如,如果我按右键向右走,在按住它的同时跳跃,角色将以“对角线”方式移动
我的主要跳跃代码(按下跳跃键时启动计时器):
public void actionPerformed (ActionEvent e) {
dy += 1;
y_pos += dy;
if (y_pos >= 400) {
dy = 0;
y_pos = 400;
timer.stop();
}
repaint();
}
现在我的KeyEvent代码:
if (command == KeyEvent.VK_RIGHT){
x_pos += 5;
right = true;
}
if (command == KeyEvent.VK_LEFT) {
x_pos -= 5;
right = false;
}
if (command == KeyEvent.VK_UP) {
if (!(timer.isRunning()))
dy = -20;
timer.start();
}
dr.repaint();
答案 0 :(得分:3)
下面是我如何实现输入逻辑。请注意,当您想进一步深入了解输入处理时,有几种选择。使用此实现,键盘输入与它们对游戏世界的效果分开,这在几个方面很方便。例如,无论按键/重复频率如何,角色的速度都是恒定的(假设游戏循环/动作的时间被正确处理)。
无论如何,有些伪代码:
// Global:
array keysdown;
keysdown[left] = false;
keysdown[right] = false;
keysdown[up] = false;
// The all-important game loop:
while (true) {
pollInputs();
doMovement();
draw();
}
function pollInputs () {
foreach (key that you want to handle) {
if (key.state == down) {
keysdown[key] = true;
} else {
keysdown[key] = false;
}
}
}
function doMovement () {
if (keysdown[left]) {
// move character left
} else if (keysdown[right]) {
// move character right
}
if (keysdown[up]) {
// initiate jump
}
}