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だけです。これは、1つの単純なテストアプリケーションをテストするためにライブラリ全体を移植したくありません。

4

3 に答える 3

0

「debugDraw」が null であるため、「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 に答える
0

参考までに、最新バージョンでは slf4j の依存関係が削除されており、多くの人が問題を抱えていました。

null ポインター例外は、正しくないことをしているように見えます。おそらく、DebugDraw の実装を作成する必要がありますか? それ以外の場合は null になります。

試してみたい場合は、Testbed テストを作成することをお勧めします。ここのウィキに従ってください

于 2013-02-28T00:09:52.023 に答える