我正在创建一个2D Java平台游戏,只是为了学习游戏编程的基础知识。昨天,我创造了第一个敌人(goomba ^^),但它没有移动。我意识到坠落变量会被覆盖,但我无法弄清楚原因。我将发布方法:
private void collision(LinkedList<GameObject> object) {
for(int i = 0; i < handler.object.size(); i++) {
GameObject tempObject = handler.object.get(i);
if(tempObject.getId() == ObjectId.Block) {
//Bottom
if(getBounds().intersects(tempObject.getBounds())) {
y = tempObject.getY() - height;
velY = 0;
falling = false;
}
else {
falling = true;
}
//Right
if(getBoundsRight().intersects(tempObject.getBounds())) {
x = tempObject.getX() - 18;
}
//Left
if(getBoundsLeft().intersects(tempObject.getBounds())) {
x = tempObject.getX() + 18;
}
}
}
}
希望有人能帮助我,坐在这里等待3个小时^^
编辑:这是我的tick()方法:
public void tick(LinkedList<GameObject> object) {
x += velX;
y += velY;
if(velX < 0) facing = -1;
else if(velX > 0) facing = 1;
if(falling) {
velY += gravity;
if(velY > MAX_SPEED) {
velY = MAX_SPEED;
}
}
else {
if(facing == 1) velX = 1;
else if(facing == -1) velX = -1;
}
collision(object);
goombaWalk.runAnimation();
goombaWalkRight.runAnimation();
}
答案 0 :(得分:0)
我认为无论事物是否彼此接近,都会定期调用此方法。否则,你不需要问它是否相交 - 你已经知道它了。
但对我来说看起来很奇怪的是,当你找到一个碰撞对象时,你不会突破循环。除非碰撞对象是列表中的最后一个,否则您的下降变量可能总是为真。
真正的问题是这个下降变量存在。你不需要它,因为你已经有了vely。如果velY非零,(或者是负数或其他什么)它会下降,对吗?因此,我的建议是摆脱堕落并为自己省去维护它的麻烦。