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

    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 введите описание изображения здесь Как видите, моя коллизия работает некорректно. Когда мой персонаж не на платформе, мой результат правильный, я получаю false но когда мой персонаж находится на платформе, я получаю true, false, false, true, ......

1
David 11 Мар 2015 в 15:58

2 ответа

Лучший ответ

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

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

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

1
David 11 Мар 2015 в 20:47

В ваш пример кода, просто введите "false" println, если не перекрытие, и "touch" - истина, я не знаю, что "затронуто" в этом случае, но если вы хотите ввести, только если ovelaping является ложным, ваши pudes provar это:

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

..// other code

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

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

..// other code

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

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

Libgdx - получить прямоугольник пересечения из Rectangle.overlap (прямоугольник)

0
Community 23 Май 2017 в 11:43