Почему в моей игре Box2d libgdx есть фантомные контактные точки - PullRequest
2 голосов
/ 13 марта 2020

Я пишу игру, используя libgdx и box2d. Когда объект касается другого, часто возникают призрачные точки соприкосновения. Вот как я рисую точки контакта:

private void renderContactPoints() {
    for (Contact contact : world.getContactList())
        for (Vector2 point : contact.getWorldManifold().getPoints())
            renderer.getBatch().draw(tex, point.x * PPM, point.y * PPM, 20, 20);

}

Снимок экрана проблемы

Screenshot of problem

1 Ответ

0 голосов
/ 14 марта 2020

Для производительности Box2D и libGDX повторно использует массивы, чтобы избежать перераспределения, поэтому вы не можете повторить полный результат getContactList и getPoints, поскольку вы получите много результаты.

Вместо этого сначала запросите количество элементов:

private void renderContactPoints() {
    for(int i = 0; i < world.getContactCount(); ++i) {
        Contact contact = world.getContactList().get(i);
        for (int j = 0; j < contact.getWorldManifold().getNumberOfContactPoints(); ++j) {
            Vector2 point = contact.getWorldManifold().getPoints()[j];
            renderer.getBatch().draw(tex, point.x * PPM, point.y * PPM, 20, 20);
        }
    }
}    
...