好的,这是我的代码(这只是使用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,我不想植入一个完整的库来测试一个简单的测试应用程序。
答案 0 :(得分:0)
我遇到了与jbox2d相同的问题。它依赖于slf4j。解决它的最简单方法是在jbox2d根目录中进行maven clean安装。然后,您将在.m2目录中找到slf4j库(它本身应位于您的主目录中)。
然后,您需要将slf4j库添加到项目构建路径中,并将其jar文件与目标项目一起导出。
这就是理论。实际上,slf4j本身对log4j有一个依赖,而maven没有解析它。所以最后我在jbox2d中注释掉了所有的日志引用,并做了另一个maven clean install。这解决了我的问题。
答案 1 :(得分:0)
仅供参考,slf4j依赖项已在最新版本中删除,太多人遇到了麻烦。
空指针异常看起来像是在做一些不太正确的事情。也许您应该进行DebugDraw实现?否则它将为null。
如果你想玩,最好只做一个Testbed测试。关注维基here
答案 2 :(得分:0)
&#34; debugDraw&#34;是null导致&#34; debugDraw.setFlags(debugDraw.e_shapeBit)&#34;与NPE失败。
创建一个扩展DebugDraw的类并将其分配给静态变量。您需要使用您正在使用的任何图形库来实现自我绘制回调,例如摇摆。但对于初学者,你也可以写出日志声明。
另外,你应该移动&#34; debugDraw.setFlags(debugDraw.e_shapeBit)&#34;和&#34; world.setDebugDraw(debugDraw)&#34;在游戏循环之前的陈述,而是放一个&#34; world.drawDebugData()&#34;在世界步骤之后的游戏环节中的陈述。