2016-09-19 3 views
0

전 세계에 두 개의 시체가 있습니다. 첫 번째는 플레이어가 움직이는 것입니다. 두 번째 동안 적군이 플레이어를 공격합니다. 나는 플레이어를위한 방패를 구현하기를 원합니다. 적이 플레이어에게 닿으면 플레이어의 선 속도에 영향을 미치지 않고 계속 움직입니다.Box2D : 특정 몸체의 힘을 무시하면서 몸을 시뮬레이션하십시오.

필자는 제 3 몸을 운동 학적으로 플레이어에 바인딩하려고 시도했지만 (플레이어보다 약간 크다), 선형 임펄스가 플레이어에 적용될 때 어떤 이유로 벽에 달라 붙어있었습니다.

그래서 나는 선수에게 강제로 멈추고 선수의 거꾸로 된 선 속도를 적에게 적용하려고했습니다. 내 선수가 안정적이지만 움직이지 않으면 잘 작동합니다.

동적 인 모든 기능을 계속 움직일 수 있지만 어떻게 적의 히트의 영향을받지 않는지와 같은 기구학적인 몸체로 만들 수 있습니까?

이것은 선수가 선회 한 후에 선 속도가 0이되어서 정상적으로 작동 할 때 코드를 시도했지만 실제로는 깨끗한 해결책이 아닙니다.

실제로 기구학 체가 있고 applyLinearImpulse를 사용할 수 있습니까? 운동기구와 관련된 문제는 내 플레이어가 단순히 벽을 무시하는 것입니다. 그러나 플레이어가 벽을 치는 것처럼 플레이어가 튀어 나와야하는 것을 제외하고는 벽과 다른 모든 것들과 충돌해야합니다.

func postSolve(contact: b2Contact, impulse: b2ContactImpulse) { 
    ... 
    if player.ShieldActive { 
    let playervelocity = player.getLinearVelocity() 
    player.forceStop // sets linearvelocity to zero including angularvelocity 
    enemy.applyLinearImpulse(playervelocity.invert()*0.1) // apply the inverted velocity of the player with a scalar so the enemy moves aways like it hit a wall 
    } 
    ... 
} 

답변

0

내 플레이어의 크기 학적으로 별도의 몸을 추가하고 적절한 범주를 설정하고 maskbits이 가능했다. 나는 자유롭게 움직일 수 있었고, 방패가 작동하는 동안 적들은 더 이상 내 플레이어에게 해를 끼치 지 못했습니다.

관련 문제