Заставьте DebugDraw работать в JBox2D

Я пытаюсь запустить DebugDraw в простом проекте Android JBox2D.

Я просто расширяю DebugDraw таким образом и помещаю некоторый вывод журнала:

public class SimpleDebugView extends DebugDraw
{
    private static final String TAG = "SimpleDebugView";

    public SimpleDebugView() {
        super(new OBBViewportTransform());
    }

    @Override
    public void drawPoint(Vec2 argPoint, float argRadiusOnScreen, Color3f argColor) {
        Log.i(TAG, "Draw point");
    }

    @Override
    public void drawSolidPolygon(Vec2[] vertices, int vertexCount, Color3f color) {
            Log.i(TAG, "Draw solid polygon");
    }

    @Override
    public void drawCircle(Vec2 center, float radius, Color3f color) {
            Log.i(TAG, "Draw circle");
    }

    @Override
    public void drawSolidCircle(Vec2 center, float radius, Vec2 axis, Color3f color) {
        Log.i(TAG, "Draw solid circle");
    }

    @Override
    public void drawSegment(Vec2 p1, Vec2 p2, Color3f color) {
        Log.i(TAG, "Draw segment");
    }

    @Override
    public void drawTransform(Transform xf) {
        Log.i(TAG, "Draw transform");
    }

    @Override
    public void drawString(float x, float y, String s, Color3f color) {
        Log.i(TAG, "Draw string");
    }
}

Я использую новый класс отладки следующим образом:

[...]
        mWorld = new World(gravity);
        mWorld.setAllowSleep(true);
        SimpleDebugView simpleDebugDraw = new SimpleDebugView();
        simpleDebugDraw.setFlags(DebugDraw.e_shapeBit | DebugDraw.e_aabbBit | DebugDraw.e_pairBit | DebugDraw.e_centerOfMassBit | DebugDraw.e_jointBit | DebugDraw.e_dynamicTreeBit);
        mWorld.setDebugDraw(simpleDebugDraw);

[...]

После этого я создаю тела и запускаю симуляцию физики.

Моя симуляция работает, я визуализирую свои вещи на основе симуляции на холсте.

Но когда я хочу использовать DebugDraw (поскольку это иногда упрощает отладку моделирования физического мира), это, похоже, не работает. Вывод журнала не отображается, и при отладке точка останова также не попадает в мой SimpleDebugView. Таким образом, кажется, что методы вообще не вызываются. Я неправильно использую DebugDraw?


person Marco    schedule 25.07.2014    source источник


Ответы (1)


Я нашел решение.

Мне нужно сообщить моему физическому миру, что он должен рисовать отладку через:

mWorld.drawDebugData();

Поэтому я вызвал это сразу после выполнения step(), и мои методы вызываются.

Почему-то я думал, что это произойдет автоматически, когда я прикреплю DebugDraw, но это не так.

person Marco    schedule 25.07.2014