【发布时间】:2014-03-22 00:36:09
【问题描述】:
最近,我一直在玩基本的 2D Java 游戏编程,并且在自己发现事物时获得了很多乐趣,但我遇到了一个问题。我创建了一个简单的碰撞方法,但它非常有问题。所以我的问题是当玩家与块碰撞时如何改变玩家的 x 和 y。我已经尝试了下面的代码,它可以识别玩家何时发生碰撞,但它没有将他的 x 和 y 设置为 x 并将 y 设置为 tempx 和 y。代码:
private void update(){
tempx = player.getX();
tempy = player.getY();
collided = checkCollision();
if(collided == false){
player.update();
}
else if(collided){
player.setX((int)tempx);
player.setY((int)tempy);
System.out.println("COLLIDED");
}
}
private boolean checkCollision(){
for(int i = 0; i < tiles.size(); i++){
Tile t = tiles.get(i);
Rectangle tr = t.getBounds();
if(tr.intersects(player.getBounds())){
return tr.intersects(getBounds());
}
}
return false;
}
正在检测到碰撞,但玩家 x 和 y 没有相应地更改。如果您需要更多代码或有任何问题,请提出。感谢您的帮助:)
附:我试过增加重力,如果有帮助的话,碰撞只适用于块的顶部
下面是 player.update() 方法:
@Override
public void keyPressed(KeyEvent e){
int k = e.getKeyCode();
if(k != 0){
if(k == KeyEvent.VK_W){
y -= vy;
}
else if(k == KeyEvent.VK_A){
x -= vx;
}
else if(k == KeyEvent.VK_S){
y += vy;
}
else if(k == KeyEvent.VK_D){
x += vx;
}
}
}
public void update(){
}
【问题讨论】:
-
tempx 和 tempy 不是玩家原始的 x 和 y 坐标吗?那么当调用 player.setX((int)tempx) 和 player.setY((int)tempy) 时,不只是设置原始坐标吗?
标签: java 2d collision-detection collision