Java 跳跃方形角色时移动
我需要能够在我的角色跳跃时移动他。问题是我不希望角色以传统的方式移动。他是正方形的,当他在地上时应该这样移动: 我不希望他在动画完成之前停止移动。但当他同时跳跃和移动时,就没有那样的动画了。当他在空中时,这个动作就成为经典 我做了一个小测试代码,我设法得到了我想要的角色在地面上的移动,但不是在空中的正常横向移动 我应该首先向您展示我的模型(Booby是角色的名字): 这是我的控制器:Java 跳跃方形角色时移动,java,while-loop,2d,Java,While Loop,2d,我需要能够在我的角色跳跃时移动他。问题是我不希望角色以传统的方式移动。他是正方形的,当他在地上时应该这样移动: 我不希望他在动画完成之前停止移动。但当他同时跳跃和移动时,就没有那样的动画了。当他在空中时,这个动作就成为经典 我做了一个小测试代码,我设法得到了我想要的角色在地面上的移动,但不是在空中的正常横向移动 我应该首先向您展示我的模型(Booby是角色的名字): 这是我的控制器: public class Controller extends KeyAdapter implements A
public class Controller extends KeyAdapter implements ActionListener {
Timer loop;
Booby booby;
boolean right;
boolean left;
boolean up;
int countUp = 0;
int jump = 0;
int countLeft = 0;
int countRight = 0;
Controller(Booby b, View v) {
booby = b;
loop = new Timer(0, this);
}
// Key events
public void keyPressed(KeyEvent e) {
int code = e.getKeyCode();
switch (code) {
case KeyEvent.VK_UP:
up = true;
right = false;
left = false;
loop.start();
break;
case KeyEvent.VK_RIGHT:
right = true;
left = false;
up = false;
loop.start();
break;
case KeyEvent.VK_LEFT:
left = true;
up = false;
right = false;
loop.start();
break;
}
}
public void actionPerformed(ActionEvent evt) {
if (up) {
countUp++;
jump++;
// When UP is pressed, it moves up a bit 10 times...
if (countUp <= 100 && countUp > 0) {
booby.move(0, -1);
}
// ...Then it moves down a bit 10 times
else if (countUp > 100) {
if (jump <= 200) {
booby.move(0, 1);
} else if (jump > 200) {
loop.stop();
jump = 0;
countUp = 0;
}
}
}
// When Right is pressed, it moves a bit 10 times to the right
else if (right) {
booby.movingRight = true;
countRight++;
if (countRight <= 315) {
booby.move(1, 0);
} else {
countRight = 0;
loop.stop();
booby.movingRight = false;
}
}
// When Leftis pressed, it moves a bit 10 times to the left
else if (left) {
booby.movingLeft = true;
countLeft++;
if (countLeft <= 315) {
booby.move(-1, 0);
} else {
countLeft = 0;
loop.stop();
booby.movingLeft = false;
}
}
}
}
现在,他可以左右移动,甚至可以跳跃。但是如果你在他跳的时候按右键,它就会停止跳并向右移动
我想要的是,当他跳的时候,你按右边,它只向右移动一次。因此,如果您继续按向右键并跳跃,它将缓慢向右移动。您应该能够通过丢弃所有事件来解决此问题,直到动画完成,即将您的按键方法更改为:
public void keyPressed( KeyEvent e ){
if( loop.isRunning() ){
// sry, not now :(
return;
}
int code = e....
我将采用这种方法:左右键在角色的垂直移动中不应有影响,而跳跃键在水平移动中不应有影响。 我认为你可以通过改变你如何“映射”你的关键动作来改变这种行为。大概是这样的:
switch (code) {
case KeyEvent.VK_UP:
up = true;
//right = false;
//left = false;
loop.start();
break;
case KeyEvent.VK_RIGHT:
right = true;
left = false;
//up = false;
loop.start();
break;
case KeyEvent.VK_LEFT:
left = true;
//up = false;
right = false;
loop.start();
break;
}
这样,当您按下右/左按钮时,它将向右/向左移动,但不会停止向上移动 Booby的+1。好名字。这真的很有用!你启发了我^^我也设法做了几乎所有我想做的事。我改变了在空中移动的想法。我不会解释我是如何做到的,但对于这一部分,我完全按照你所写的做了。非常感谢你!如果您希望看到更新(我还添加了一个向下键以使他停止移动):由于旧链接可能存在一些问题,所以在其他地方托管了相同的文件:
public void keyPressed( KeyEvent e ){
if( loop.isRunning() ){
// sry, not now :(
return;
}
int code = e....
switch (code) {
case KeyEvent.VK_UP:
up = true;
//right = false;
//left = false;
loop.start();
break;
case KeyEvent.VK_RIGHT:
right = true;
left = false;
//up = false;
loop.start();
break;
case KeyEvent.VK_LEFT:
left = true;
//up = false;
right = false;
loop.start();
break;
}