2014-01-29 5 views
1

LibGdx에서 Box2D를 사용하여 platformer 게임을 만듭니다. 타일을 고정 장치로 변환하는 알고리즘이 있습니다. 플레이어가 공중에 있는지 여부를 확인하기 위해 접촉 수신기를 사용하지만, 문제는, 내가 서로 옆에있는 조명기들을 사용하고 있기 때문이다.LibGdx Box2d Platformer 점프 구현

(P)--> 

| tile | 타일 ​​| 타일 ​​|

연락처 리스너는 인접한 타일을 전달하고 MOB_AIR 값을 true로 설정하면 전화를 건 후에 연락처를 호출합니다. 결과적으로 지상에 있더라도 점프 할 수 없습니다.

코드의 다른 부분 (mob 및 box2d world)은 잘 동작합니다. 왜냐하면 내가 새로 착륙하거나 타일 사이에 점프 할 수 있기 때문입니다.

이전에 같은 문제가 발생했다면이 점핑을 구현하는 좋은 방법이 있습니까? 내 나쁜 영어 죄송

http://i.imgur.com/yWcDsZb.png

http://i.imgur.com/v8ny3sO.png

은 어떤 부탁드립니다 도움이됩니다.

추신 : 또한 box2d 폴리곤 - 폴리곤 콜리 손 결함 때문에 문제가되지 않습니다. 플레이어의 체인 모양과 타일의 폴리곤을 사용합니다. 대신 당신이이/최종 접촉을 시작 증가 및 센서가 접촉 얼마나 많은 일을 관리하기 위해 카운터를 감소시키는 시도에 도착하면 간단하게 상태를 설정 `

 public void beginContact(Contact contact) { 
      Fixture x1 = contact.getFixtureA(); 
      Fixture x2 = contact.getFixtureB(); 

      if(x1.getUserData()!=null && x2.getUserData()!=null){ 
       if(x1.getUserData().equals("sensor") && x2.getUserData().equals("x")){ 
        mob.setState(Mob.ON_AIR, false); 
       } 

       else if(x2.getUserData().equals("sensor") && x1.getUserData().equals("x")){ 
        mob.setState(Mob.ON_AIR, false); 
       } 
      } 

     } 

     @Override 
     public void endContact(Contact contact) { 
      Fixture x1 = contact.getFixtureA(); 
      Fixture x2 = contact.getFixtureB(); 

      if(x1.getUserData()!=null && x2.getUserData()!=null){ 
       if(x1.getUserData().equals("sensor") && x2.getUserData().equals("x")){ 

        mob.setState(Mob.ON_AIR, true); 

       } 
       else if(x2.getUserData().equals("sensor") && x1.getUserData().equals("x")){ 

        mob.setState(Mob.ON_AIR, true); 
       } 
      } 
     }` 

답변