0

我有球员身体。他有单跳。即当他跳跃时,他必须等待触地才能进行第二次跳跃。

 private ContactListener contactListener()
    {
        ContactListener contactListener = new ContactListener()
        {
            @Override
            public void beginContact(Contact contact)
            {
                 player.setJumping(false);


            }

            @Override
            public void endContact(Contact contact)
            {

                        player.setJumping(true);




            }   
         };
         return contactListener;
    }

如果有接触,他可以跳。如果没有,他就不能跳,因为他在空中。在那个代码中,如果他的头碰到任何身体,他也可以跳跃。所以这是错误。只有当他的脚接触时,他才需要跳跃。我怎么解决这个问题?

4

1 回答 1

1

您可以在夹具数据中使用 ID。如果您的播放器有两个固定装置 - 身体和头部,那么您可以为它们分配标签然后检查它们,例如:

void BeginContact(b2Contact* contact) {       
    void* firstFixtureUserData = contact->GetFixtureA()->GetUserData();
    void* secondFixtureUserData = contact->GetFixtureB()->GetUserData();
    //check if fixtures was with the correct tags
    if ( (int)firstFixtureUserData == kPlayerBody || (int)secondFixtureUserData == kPlayerBody) { 
       if((int)firstFixtureUserData == kGround || (int)secondFixtureUserData == kGround) {
         player->jump();   
       }
   }   
}

我认为这个链接会很有用:跳跃能力

于 2013-10-21T22:15:02.763 回答