我正在使用物理世界,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次射击时会发生上述碰撞。
连连呢?我长期以来一直在处理这个问题而且非常令人沮丧,如果需要,我很乐意提供更多信息。感谢。
答案 0 :(得分:1)
根据我的观点,我看到很多错误。
首先,您要创建具有(0,0,0)等夹具属性的实体。 那么这段代码所创造的身体类型我无法理解!
首先使这个事情正确并根据要求应用适当的值。
如果你的假设是破坏身体,那么写代码就意味着不要使用主动方法。
你必须在线程中编写的破坏代码,以便它独立执行。所以你必须为destroy体维护标志,以便同一个线程不会调用两次。
编辑:像这样创建物理连接器,
physicsWorld.registerPhysicsConnector(new PhysicsConnector(testSprite, testBody));