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条件。我也看到了我对答案的编辑。