2013-09-24 31 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,我不能发表评论。