0

好的,这是我的代码(这只是使用 DebugDraw 的测试):

package test;
import org.jbox2d.callbacks.*;
import org.jbox2d.collision.shapes.*;
import org.jbox2d.common.*;
import org.jbox2d.dynamics.*;

public class Main {
private static DebugDraw debugDraw;

public static DebugDraw getDebugDraw() {
    return debugDraw;
}
public static void main(String[] args) {
    Vec2  gravity = new Vec2(0,-10);
boolean doSleep = true;
World world = new World(gravity,doSleep);
BodyDef groundBodyDef = new BodyDef();
groundBodyDef.position.set(0, -10);
Body groundBody = world.createBody(groundBodyDef);
PolygonShape groundBox = new PolygonShape();
groundBox.setAsBox(50,10);
groundBody.createFixture(groundBox, 0);

// Dynamic Body
BodyDef bodyDef = new BodyDef();
bodyDef.type = BodyType.DYNAMIC;
bodyDef.position.set(0, 4);
Body body = world.createBody(bodyDef);
PolygonShape dynamicBox = new PolygonShape();
dynamicBox.setAsBox(1, 1);
FixtureDef fixtureDef = new FixtureDef();
fixtureDef.shape = dynamicBox;
fixtureDef.density=1;
fixtureDef.friction=0.3f;
body.createFixture(fixtureDef);

// Setup world
float timeStep = 1.0f/60.0f;
int velocityIterations = 6;
int positionIterations = 2;

// Run loop
for (int i = 0; i < 60; ++i)
{
    world.step(timeStep, velocityIterations, positionIterations);
    Vec2 position = body.getPosition();
    float angle = body.getAngle();
    debugDraw.setFlags(debugDraw.e_shapeBit);
    world.setDebugDraw(debugDraw);
    System.out.println(i+": X: "+position.x+" Y: "+position.y+" ANGLE: "+angle);
}

}
}

当我运行此代码时,我得到:

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Exception in thread "main" java.lang.NullPointerException
at test.Main.main(Main.java:49)
Java Result: 1

有谁知道是什么原因造成的,我应该怎么做?我尝试过谷歌搜索,但我只能找到 Slick2D,我不想植入整个库来测试一个简单的测试应用程序。

4

3 回答 3

0

仅供参考,slf4j 依赖已在最新版本中删除,太多人遇到了麻烦。

空指针异常看起来您正在做一些不太正确的事情。也许你应该做一个 DebugDraw 实现?否则它将为空。

如果你想玩,最好只做一个 Testbed 测试。在此处关注 wiki

于 2013-02-28T00:09:52.023 回答
0

“debugDraw”为空,导致“debugDraw.setFlags(debugDraw.e_shapeBit)”因 NPE 而失败。

创建一个扩展 DebugDraw 的类并将其分配给您的静态变量。您需要使用您正在使用的任何图形库(例如 Swing)来实现自己的绘制回调。但是对于初学者,您也可以只写出日志语句。

此外,您应该将“debugDraw.setFlags(debugDraw.e_shapeBit)”和“world.setDebugDraw(debugDraw)”语句移到游戏循环之前,而是在世界步骤之后的游戏循环中放置“world.drawDebugData()”语句.

于 2014-07-16T18:55:08.630 回答
0

我对 jbox2d 也有同样的问题。它依赖于 slf4j。解决它的最简单方法是在 jbox2d 根目录中进行 maven 全新安装。然后,您将在 .m2 目录中找到 slf4j 库(它本身应该在您的主目录中)。

然后,您需要将 slf4j 库添加到您的项目构建路径中,并将其 jar 文件与目标项目一起导出。

这就是理论。实际上 slf4j 本身对 log4j 有依赖关系,maven 没有解决这个依赖关系。所以最后我注释掉了 jbox2d 中的所有日志引用,并进行了另一个 maven 全新安装。这为我解决了这个问题。

于 2013-02-12T13:16:17.943 回答