-2
我是编程新手,所以我只是在玩一个我想做的无限亚军游戏。我添加了角色图像,并且他必须尝试克服移动块。目前我拥有它,因此,如果角色与该块相撞,他的速度将为0,因此他无法移动该对象。但是我的KeyListener覆盖了这个。所以一旦该块击中角色,他就会停止移动1次游戏刻度,但是如果您按住键并且他直线移动块,则KeyListener将继续增加他的速度。我无法弄清楚如何解决这个问题。约束一个移动的对象
这是我的球员类,它处理球员的运动以及约束。
package runner;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
public class Player implements KeyListener {
public static int playerX = 35;
public static int playerY = 285;
public static int playerWidth = 100;
public static int playerHeight = 100;
public static int playerVX, playerVY;
public static void update() {
playerX += playerVX;
playerY += playerVY;
constrain();
}
public static void paint(Graphics g) {
//g.setColor(Color.white);
//g.fillRect(playerX, playerY, 100,100);
}
public static void constrain() {
if (playerX + playerWidth >= Obstacle.getX() && playerX <=
Obstacle.getX() + Obstacle.width && playerY + playerHeight >=
Obstacle.getY()) {
playerX = 0;
}
}
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyPressed(KeyEvent e) {
int keyCode = e.getKeyCode();
if(keyCode == KeyEvent.VK_LEFT) {
playerVX = -5;
}
if(keyCode == KeyEvent.VK_RIGHT) {
playerVX = 5;
}
if(keyCode == KeyEvent.VK_UP) {
playerVY = -5;
}
if(keyCode == KeyEvent.VK_DOWN) {
playerVY = 5;
}
}
@Override
public void keyReleased(KeyEvent e) {
int keyCode = e.getKeyCode();
if(keyCode == KeyEvent.VK_LEFT) {
playerVX = 0;
}
if(keyCode == KeyEvent.VK_RIGHT) {
playerVX = 0;
}
if(keyCode == KeyEvent.VK_UP) {
playerVY = 0;
}
if(keyCode == KeyEvent.VK_DOWN) {
playerVY = 0;
}
}
}
谢谢!
对不起,这不是StackOverflow的工作原理。形式问题_“这是我的一堆代码,它不起作用,有人能帮我弄清楚”_被认为是无关紧要的。请访问[帮助]并阅读[问]获取更多信息,尤其是阅读[为什么是“有人可以帮助我?”不是一个实际问题?](http://meta.stackoverflow.com/q/284236/18157 )。你有没有在代码中放置断点来查看实际发生的事情? –
我想,因为我只是错过了一些小问题,这个问题将是适当的。我在我的代码中加入了断点。一旦角色碰撞块,Velocity被设置为0,但是下一次游戏时间戳,你可以使用KeyListener来提高通过块直接发送角色的速度 – CoderKlipto
好吧,你知道发生了什么,修改你的代码以防止通过检查关键听众是否可以沿选定方向移动而发生。 –