У меня движущаяся платформа с постоянной скоростью, и мне нужно обновить позицию игрока, когда мой игрок прыгает на эту платформу. Но у меня проблемы с обнаружением столкновений. Вот как я пытаюсь обнаружить столкновение между нижним прямоугольником моего игрока и прямоугольником платформы.
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
, ......
2 ответа
Наконец-то я выяснил, что случилось. В этой строке мне нужно вычесть число
player1.action2(1, platformPositonX,(platform.getHitBox().y + platform.getHitBox().height - 5 ));
Теперь все работает!
В ваш пример кода, просто введите "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 (прямоугольник)
Похожие вопросы
Связанные вопросы
Новые вопросы
libgdx
libGDX — это кроссплатформенная среда разработки Java-игр с открытым исходным кодом, основанная на OpenGL (ES), которая работает в браузерах с поддержкой Windows, Linux, Mac OS X, Android, iOS и WebGL.