所以我只是在业余时间制作2D游戏,我很难理解为什么角色跳跃后我的碰撞代码会中断,而角色跳跃时却会起作用。
主要类别中的相关代码
public void collision() {
Rectangle body = jan.getBody();
int bodyX = (int) body.getX();
int bodyY = (int) body.getY();
if (bodyX < 0) {
body.setLocation(0, bodyY);
jan.setBody(body);
}
if (bodyX > 780) {
body.setLocation(780, bodyY);
jan.setBody(body);
}
if (bodyY > 360) {
body.setLocation(bodyX, 360);
jan.setBody(body);
}
}
public void actionPerformed(ActionEvent e) {
jan.update();
collision();
repaint();
}
public void keyPressed(KeyEvent e) {
int keyCode = e.getKeyCode();
if (keyCode == KeyEvent.VK_LEFT) {
jan.setDirection(-1);
} else if (keyCode == KeyEvent.VK_RIGHT) {
jan.setDirection(1);
} else if (keyCode == KeyEvent.VK_SPACE) {
jan.jump();
}
}
播放器类中的相关代码
public void jump() {
int y = (int) body.getY();
if (y == 360) {
body.translate(0, -15);
yVelocity = 15;
}
}
public void update() {
int x = getDirection();
if (x == 1) {
if (xVelocity < terminalVelocity) {
xVelocity++;
}
}
if (x == -1) {
if (xVelocity > -terminalVelocity) {
xVelocity--;
}
}
if (x == 0) {
if (xVelocity < 0) {
xVelocity++;
} else if (xVelocity > 0) {
xVelocity--;
}
}
if (body.y < 360) {
yVelocity--;
}
body.translate(xVelocity, -yVelocity);
}
为什么我的角色跳动后我的代码崩溃了?
答案 0 :(得分:0)
如果Y也超出范围,则collision
的逻辑将取消X中的钳位。尝试同时夹紧x和y,然后在发生变化的情况下更新主体:
public void collision() {
Rectangle body = jan.getBody();
int bodyX = (int) body.getX();
int bodyY = (int) body.getY();
int clampedBodyX = Math.min(Math.max(0, bodyX), 780);
int clampedBodyY = Math.min(Math.max(0, bodyY), 360);
if (bodyX != clampedBodyX || bodyY != clampedBodyY) {
body.setLocation(clampedBodyX, clampedBodyY);
jan.setBody(body);
}
}