2015-03-11 3 views
1

У меня есть движущаяся платформа с постоянной скоростью, и мне нужно обновить позицию моего игрока, когда мой олайнер прыгнет на эту платформу. Но у меня проблемы с обнаружением столкновений. Здесь, как я пытаюсь обнаружить столкновение между нижним прямоугольником моего игрока и Rectangle платформы.Обнаружение столкновения движущейся платформы

for(GameObject t2 : list){ 
        if(t2 instanceof Platform){ 

         platform = (Platform) t2; 
         render.rect(platform.getHitBox().getX(), 
            platform.getHitBox().getY(), 
            platform.getHitBox().getWidth(), 
            platform.getHitBox().getHeight()); 

         platform.update(Gdx.graphics.getDeltaTime(), 0, 
             player1.getHitBox().getX(), 
             Gdx.graphics.getWidth()); 

         if(platform.getHitBox().overlaps(player1.getHitBox()) 
          ||player1.getHitBox().overlaps(platform.getHitBox())){ 

          System.out.println("true"); 

          platformPositonX = player1.getHitBox().getX() 
               + platform.getUpdateSpeed(); 

          player1.action2(1, platformPositonX, 
              (platform.getHitBox().y + 
              platform.getHitBox().height)); 

         }else{ 
          System.out.println("false"); 
         } 
        } 
} 

Вот мой экран печати и мой результат печати в concole enter image description here Как вы можете видеть мое столкновение не работать правильно. Когда мой персонаж не на платформе мой результат правильно я получаю false , но когда мой персонаж на платформе я получил true, false, false, true, ......

+0

Почему вы дважды проверяете столкновение? player1.getHitBox(). перекрывает (platform.getHitBox() и platform.getHitBox(). overlaps (player1.getHitBox() одинаковы и возвращают тот же результат. Overlaps означает, что они сталкиваются с «друг с другом». –

+0

Теперь к вашей проблеме, вы уверены, что обновляете платформу hitbox по мере продвижения платформы? Можете ли вы опубликовать код своего класса Platform? –

ответ

1

Наконец-то я узнал, что это не так. В этой строке мне нужно вычесть число

player1.action2(1, platformPositonX,(platform.getHitBox().y + platform.getHitBox().height - 5)); 

Теперь все работает!

0

в примере кода, просто введите «false» println, если это не перекрытие, и коснулось правдиво, я не знаю, что в этом случае «тронуто», но если вы хотите ввести только в том случае, если ovelaping false, ваши пуды доказывают это:

в вашем коде говорится:

..// other code 

    }else if(touched){ 
      System.out.println("false"); 
    } 
} 

изменение для этого:

..// other code 

    }else{ 
      System.out.println("false"); 
    } 
} 

Вы также можете быть заинтересованы, чтобы посмотреть на это:

Libgdx - Get Intersection Rectangle from Rectangle.overlap(Rectangle)

Смежные вопросы