Я работаю с 2D-платформером, и я хочу сделать коробки, которые падают с неба. И когда столкновение между коробкой и землей происходит, коробки должны перестать падать. Вот мой код Ф.О. обнаружения столкновений и обновления в Box
классеОбновления y-позиции LibGDX прямоугольника даже после столкновения
public Box(int x, int y){
hitBox = new Rectangle(x, y, 64, 64);
bottom = new Rectangle(x + 5, y, 54, 14);
top = new Rectangle(x + 5, y + 5 + 50, 54, 14);
// other code
}
@Override
public void update(float delta) {
if(!hits){
velocity -= (1 * delta);
System.out.println("velc " + velocity);
hitBox.y += velocity;
top.y += velocity;
bottom.y += velocity;
sprite.setPosition(hitBox.x, hitBox.y);
}
}
@Override
public int hits2(Rectangle r) {
if(bottom.overlaps(r)){
velocity = 0;
hits = true;
System.out.println("hit");
return 1;
}
System.out.println("n");
hits = false;
return 0;
}
И вот мой код из Main
класса
for(int i=0; i<list.size(); i++){
Box tmpBox = (Box) (list.get(i) instanceof Box ? list.get(i) : null);
for(int j=0; j<list.size(); j++){
if(tmpBox != null){
Brick brick = (Brick) (list.get(j) instanceof Brick ? list.get(j) : null);
Box tmpOtherBox = (Box) (list.get(j) instanceof Box ? list.get(j) : null);
if(brick != null){ // if collision with ground rectangle
tmpBox.hits2(brick.getTop());
}
if(tmpOtherBox != null && tmpOtherBox.hashCode() != tmpBox.hashCode()){ if collision with other box rectangle
tmpBox.hits2(tmpOtherBox.getHitBox());
}
}
}
if(tmpBox != null){
tmpBox.update(Gdx.graphics.getDeltaTime());
}
}
Но проблема в том, что при столкновении коробка с землей мой ящик все еще падают, кроме него скорость очень мало. Почему я получаю этот странный результат? Я знаю, что я мог бы просто удалить hits = false;
в моем методе hits2
, а затем моя коробка не упадет, когда они столкнутся с землей, но почему же столкновение между прямоугольниками работает так странно? UPDATE: здесь, как это выглядит visually
Спасибо, я проверил все. Также я обновляю свой пост и добавляю короткое видео о своей проблеме – David