【发布时间】:2013-09-25 11:36:51
【问题描述】:
我正在使用我的物理世界、ContactListener,或者只是我创建的实体。
我的问题是我可以创建一个身体/精灵。身体和精灵被正确绘制,玩家无法穿过它们,但碰撞对它们不起作用。我有一个方法有这个问题,所以为了测试这个问题,当玩家射箭时,我创建了一个这样的身体:
Sprite testSprite = new Sprite(player.getX() + 100, player.getY() + 100,
resourcesManager.wall_region, vbom);
Body testBody = PhysicsFactory.createBoxBody(physicsWorld, testSprite,
BodyType.DynamicBody, PhysicsFactory.createFixtureDef(0, 0, 0));
attachChild(testSprite);
physicsWorld.registerPhysicsConnector(new PhysicsConnector(testSprite, testBody));
testBody.setUserData(new UserData("Tile", testSprite, 100, testBody));
System.out.println(testBody);
这些身体/精灵创造得很好,我无法穿过它们。但是这些测试体和箭头之间的接触并不能正常工作。
这是我的 ContactListener 中的碰撞,当箭头和瓷砖碰撞时应该发生:
if (((boolean) ((UserData) x1.getBody().getUserData())
.getType().equals("Tile"))
&& ((boolean) ((UserData) x2.getBody()
.getUserData()).getType().equals("arrow"))) {
System.out.println("Tile/Arrow");
engine.runOnUpdateThread(new Runnable() {
@Override
public void run() {
x2.getBody().setActive(false);
final Sprite sprite = (Sprite) ((UserData) x2
.getBody().getUserData()).getSprite();
detachChild(sprite);
final PhysicsConnector physicsConnector = physicsWorld
.getPhysicsConnectorManager()
.findPhysicsConnectorByShape(sprite);
physicsWorld
.unregisterPhysicsConnector(physicsConnector);
}
});
}
但奇怪的是,这种碰撞需要一段时间才能注册。例如,我可以向 testBody 射 10 支箭,它们会弹开,但是当我射出第 11 支时,就会发生上述碰撞。
建议?我一直在处理这个问题很长一段时间,它变得非常令人沮丧,如果需要,我很乐意提供更多信息。谢谢。
【问题讨论】:
标签: java android box2d andengine