我在檢測遊戲中的碰撞時遇到了一些麻煩。似乎碰撞檢測只在部分牆上進行。我正在使用slick2d作爲我的圖書館。如果你需要更多的代碼或信息,我可以給你。我現在必須去某個地方,所以我只是快速輸入,但如果你需要更多的東西,請問。使用Slick檢測2D環境中的碰撞
代碼:
@Override
public void manageWallCollision(Scene currScene) {
for(int i = 0; i < currScene.getMapManager().getWalls().size(); i++){
MapTile currTile = currScene.getMapManager().getWalls().get(i);
if(currTile.isCollidable()){
if(this.getBounds().intersects(currTile.getBounds())){
//bottom
if(this.y2 < currTile.getY()){
}
//right
else if(this.x2 < currTile.getX()){
}
//left
else if(this.y > currTile.getY2()){
}
//top
else if(this.x > currTile.getX()){
}
break;
}
}
}
}
任何幫助表示讚賞。謝謝。
新代碼:
for(int i = 0; i < currScene.getMapManager().getWalls().size(); i++){
MapTile currTile = currScene.getMapManager().getWalls().get(i);
if(currTile.isCollidable()){
if(this.getBounds().intersects(currTile.getBounds())){
//down
if(this.y2 < currTile.getY() && this.y < currTile.getY2() && this.y2 < currTile.getY2()){
this.setY(currTile.getY() - this.getHEIGHT());
}
//up
if(this.y < currTile.getY2() && this.y2 > currTile.getY() && this.y2 > currTile.getY2()){
this.setY(currTile.getY2());
}
//right
if(this.x2 < currTile.getX() && this.x < currTile.getX2() && this.x2 < currTile.getX2()){
this.setX(currTile.getX() - this.getWIDTH());
}
//left
if(this.x < currTile.getX2() && this.x2 > currTile.getX() && this.x2 > currTile.getX2()){
this.setX(currTile.getX2());
}
}
}
}
我仍然有問題。它檢測到的碰撞很好,但是碰到特定牆壁的任何地方碰到相同的地方。想象一下2d的房間。因此,如果它與左側牆相撞,它會自動轉到該牆上的某個位置。如果你嘗試沿着牆壁滑動,那麼它會變得非常糟糕,你會不斷前進,然後向後移動。我對發生的事情感到困惑。
好的謝謝你的迴應。我只是簡單地看一下這個,因爲我必須去某個地方,但在幾個小時內我會更詳細地看看它。謝謝您的幫助。 – user2280906 2014-09-06 13:22:25