Java 车身不能产生正确的发动机
我要么在物理世界里,要么就是在身体上 我的问题是我可以创建一个身体/精灵。身体和精灵绘制正确,玩家无法穿过它们,但碰撞不会对它们起作用。我有一个方法有这个问题,所以为了测试这个问题,当玩家射出一支箭时,我创造了一个这样的身体:Java 车身不能产生正确的发动机,java,android,box2d,andengine,Java,Android,Box2d,Andengine,我要么在物理世界里,要么就是在身体上 我的问题是我可以创建一个身体/精灵。身体和精灵绘制正确,玩家无法穿过它们,但碰撞不会对它们起作用。我有一个方法有这个问题,所以为了测试这个问题,当玩家射出一支箭时,我创造了一个这样的身体: Sprite testSprite = new Sprite(player.getX() + 100, player.getY() + 100, resourcesManager.wall_region, vbom); Body t
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,0,0)等设备特性的实体。 所以,这段代码创建了什么类型的身体,我无法理解 首先,根据要求纠正此问题并应用适当的值 若你们们的假设是要摧毁你们们的身体,那个么你们们就要为此编写代码,这意味着不要使用主动方法 必须在线程中编写的销毁代码,以便独立执行。所以您必须维护destroy body的标志,这样同一个线程就不会调用两次 编辑:像这样创建物理连接器
physicsWorld.registerPhysicsConnector(new PhysicsConnector(testSprite, testBody));
谢谢你的意见。我创建这些TestBody只是为了测试碰撞是否有效,因为当我的场景开始时,我创建了几十个像这样的实体作为游戏中的墙,所以夹具属性不是问题。但是,如果我在我的初始实体之后创建实体,它们似乎不起作用。还可以通过字符串打印接收两个实体的用户数据,以便您能够确定联系人侦听器是否正在呼叫?直接内部开始接触法,无任何if条件。我也看到了我对答案的编辑。