我尝试在一个简单的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错了吗?
答案 0 :(得分:0)
我找到了解决方案。
我需要告诉我的物理世界它应该通过以下方式进行调试:
mWorld.drawDebugData();
所以我在执行step()之后直接调用它,然后调用我的方法。
不知怎的,我认为当我附加一个DebugDraw时会自动发生,但它不是。