【问题标题】:Box2d - AndEngineBox2d - 和引擎
【发布时间】:2014-04-25 11:08:04
【问题描述】:

如何在andengine gles2 中获取与body 相关联的精灵? 当身体碰撞时,我可以获得关联的身体,但我如何才能获得与这些身体相关的精灵。

请帮助我,我是 andengine 和 box2d 的新手。

提前致谢。

【问题讨论】:

    标签: box2d andengine


    【解决方案1】:

    当您创建一个 Body 时,该 body 允许您设置一些额外的数据,如下所示:

    myBody.setUserData( "Monster" ); //to set a String
    myBody.setUserData( 333 ); //to set a number
    myBody.setUserData( new MyData() ); //to set other Object
    

    事实上,这个方法可以接受任何东西,因为它需要一个 Object 元素。 因此,您可以创建自己的类来处理与该主体关联的精灵/实体,如下所示:

    class BodyData{
        public IEntity mEntity;
        public String mName;
    
        public BodyData(String pName, pEntity){
            mEntity = pEntity;
            mName = pName;
        }
    }
    

    然后,当您创建身体并连接到精灵时,您可以执行以下操作:

    myPlayerBody.setUserData( new BodyData("Player", myPlayerSprite ));
    

    当检测到碰撞时:

    mPhysicsWorld.setContactListener( 
        new ContactListener(){
            public void beginContact(Contact contact){
                final Fixture mB1 = contact.getFixtureA();
                final Fixture mB2 = contact.getFixtureB();
    
                if(mB2.getBody().getUserData() != null && mB1.getBody().getUserData() != null){
                    final BodyData mBD1 = (BodyData)mB1.getBody().getUserData();
                    final BodyData mBD2 = (BodyData)mB2.getBody().getUserData();
                    Sprite mSprite1 = (Sprite) mBD1.mEntity;
                    Sprite mSprite2 = (Sprite) mBD2.mEntity;
                    // Do whatever you want to do with the sprites
                }
            }
            public void endContact(Contact contact) {   
            }
            public void preSolve(Contact contact, Manifold oldManifold) {   
            }
            public void postSolve(Contact contact,
                    ContactImpulse impulse) {
            }
        }
    );
    

    【讨论】:

      【解决方案2】:

      你必须注册一个PhysicConnector,这样你就可以将一个精灵连接到一个身体:

      physicsWorld.registerPhysicsConnector(new PhysicsConnector(sprite, body, true, true));
      

      希望对你有帮助!

      【讨论】:

        【解决方案3】:
            //Body variable in above Body bodyname;
            //associate body with the sprite
            body=PhysicsFactory.createBoxBody(physics_world, sprite_name, BodyType.DynamicBody, fixturedefinition);
        

        这里的最后一行夹具定义将根据您的选择进行定义。

        【讨论】:

          【解决方案4】:

          当您创建 Body 时,将 UserData 设置为您的精灵/实体,如下所示:

          yourBody.setUserData(yourSprite);
          

          在物理事件中,您可以使用以下方法获取精灵:

          public void beginContact(final Contact contact) {
              final Body bA = contact.getFixtureA().getBody();
              final Body bB = contact.getFixtureB().getBody();
              final Object oA = contact.getFixtureA().getBody().getUserData();
              final Object oB = contact.getFixtureB().getBody().getUserData();
              final Sprite spriteA = (Sprite)oA;
              final Sprite spriteB = (Sprite)oB;
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-10-02
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多