2013-09-24 28 views
1

我有一個動態的精靈和很少的靜態。我的動態身體:Box2d中的動態主體爲null

BodyDef bodyDef = new BodyDef(); 
bodyDef.type = BodyType.DynamicBody; 

bodyDef.position.set(180, 20); 
bodyMonkey = world.createBody(bodyDef); 
PolygonShape abcBox = new PolygonShape(); 
bodyMonkey.setUserData(monkey1); 
bodyMonkey.setFixedRotation(true); 
abcBox.setAsBox(10.0f, 10.0f); 
FixtureDef fixtureDef = new FixtureDef(); 
fixtureDef.shape = abcBox; 
fixtureDef.density = 0.5f; 
fixtureDef.friction = 0.0f; 
fixtureDef.restitution = 0.9f; 
Fixture fixture = bodyMonkey.createFixture(fixtureDef); 
abcBox.dispose(); 
bodyMonkey.setLinearVelocity(new Vector2(1f, 0.5f)); 
bodyMonkey.setLinearDamping(1.0f); 

我必須實現ContactListener。我的等級:

@Override 
public void beginContact(Contact contact) { 
    Object a = contact.getFixtureA().getBody().getUserData(); 
    Object b = contact.getFixtureB().getBody().getUserData();// null 

    Gdx.app.log("1", ""+a); 
    Gdx.app.log("2", ""+b); 
    if(a!=null&&b!=null) { 
     Gdx.app.log("ok", ""); 
     screen2dBox.restartGame(); 
    } 
} 

@Override 
public void endContact(Contact contact) { 
    // TODO Auto-generated method stub 

} 

@Override 
public void preSolve(Contact contact, Manifold oldManifold) { 
    // TODO Auto-generated method stub 
} 

@Override 
public void postSolve(Contact contact, ContactImpulse impulse) { 
    // TODO Auto-generated method stub 
} 

但對象B alaways空(無,B是動態的,我看到它在我的日誌)。我試圖使用try,catch,最後來克服這個(在finally塊 - screen2dBox.restartGame();)但我有錯誤,聯繫人不能爲空。我不知道它是如何解決的?感謝幫助。

靜體:

BodyDef bodyDefPlatform1 = new BodyDef(); 
    bodyDefPlatform1.type = BodyType.StaticBody; 
    bodyDefPlatform1.position.set(50, 280); 
    bodyPlatform1 = world.createBody(bodyDefPlatform1); 
    PolygonShape platformBox1 = new PolygonShape(); 
    bodyPlatform1.setUserData(platform); 
    platformBox1.setAsBox(20.0f, 10.0f); 
    FixtureDef fixtureDefPlatform1 = new FixtureDef(); 
    fixtureDefPlatform1.shape = platformBox1; 
    Fixture fixturePlatform = bodyPlatform1.createFixture(fixtureDefPlatform1); 
    platformBox1.dispose(); 
+0

你可以發佈任何靜態物體的初始化代碼嗎? – ssantos

回答

0

我檢查你的代碼,我看不到任何錯誤。也許對象monkey1是空的。

bodyMonkey.setUserData(monkey1); //check if monkey1 is null. 

注:我有低reputationacion,我不能發表評論。