身体没有创造正确的发动机

时间:2013-09-22 23:25:28

标签: java android box2d andengine

我正在使用物理世界,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次射击时会发生上述碰撞。

连连呢?我长期以来一直在处理这个问题而且非常令人沮丧,如果需要,我很乐意提供更多信息。感谢。

1 个答案:

答案 0 :(得分:1)

根据我的观点,我看到很多错误。

首先,您要创建具有(0,0,0)等夹具属性的实体。 那么这段代码所创造的身体类型我无法理解!

首先使这个事情正确并根据要求应用适当的值。

如果你的假设是破坏身体,那么写代码就意味着不要使用主动方法。

你必须在线程中编写的破坏代码,以便它独立执行。所以你必须为destroy体维护标志,以便同一个线程不会调用两次。

编辑:像这样创建物理连接器,

physicsWorld.registerPhysicsConnector(new PhysicsConnector(testSprite, testBody));