У меня возникли проблемы с обнаружением столкновения в моей игре. Похоже, что обнаружение столкновения работает только часть времени только на некоторых стенах. Я использую slick2d для своей библиотеки. Если вам нужен еще какой-либо код или информация, я могу передать его вам. Мне нужно идти куда-то прямо сейчас, поэтому я просто набираю это быстро, но если вам нужно что-то еще, просто спросите.Обнаружение столкновения в 2D среде с помощью Slick
Код:
@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());
}
}
}
}
Я до сих пор возникают проблемы. Он обнаруживает мелкий столкновение, но везде, где он попадает на конкретную стену, он переходит в одно и то же место. Представьте себе 2-й номер. Поэтому, если он столкнулся с левой стеной, он автоматически переходит в положение на этой стене. И если вы попытаетесь скользить по стене, тогда она становится действительно глючной, и вы постоянно двигаетесь вперед, а затем назад. Я смущен, что происходит.
Хорошо спасибо за ответ. Мне просто нужно взглянуть на это кратко, потому что я должен пойти куда-нибудь, но через несколько часов я посмотрю на это более подробно. Спасибо за помощь. – user2280906