获取在JBox2D中运行的DebugDraw

时间:2014-07-25 09:12:48

标签: android jbox2d

我尝试在一个简单的Android JBox2D项目中运行DebugDraw。

我只是像这样扩展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错了吗?

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。

我需要告诉我的物理世界它应该通过以下方式进行调试:

mWorld.drawDebugData();

所以我在执行step()之后直接调用它,然后调用我的方法。

不知怎的,我认为当我附加一个DebugDraw时会自动发生,但它不是。