2015-05-14 1 views
0

Я работаю с 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

ответ

0

Вы проверили столкновений прямоугольник земли, рисуя его? а также нарисовать столкновение коробки и проверить точку столкновения. Потому что я сделал это в одной из своих игр, и я рисовал прямоугольник для столкновений на большом дне, поэтому, когда актер вышел из экрана, просто подумайте так, как он сталкивается.

Столкновение в libgdx отлично работает с методом перекрытия.

+0

Спасибо, я проверил все. Также я обновляю свой пост и добавляю короткое видео о своей проблеме – David