답변:
내 솔루션은 게임 맵의 모든 물리적 개체를 트리 노드 로 취급하고 맵 자체를 루트 노드로 취급하는 것 입니다. 노드는 다른 노드를 포함 할 수 있습니다. 모든 노드는 맵 노드 내에 (직접 또는 간접적으로) 포함됩니다.
예를 들어, 캐릭터가 플랫폼 위에 서 있다고 가정 해 봅시다. 플랫폼의 노드는 캐릭터의 노드를 포함합니다. 따라서 플랫폼이 이동할 때마다 플랫폼에 포함 된 노드 (이 경우 캐릭터)도 이동합니다.
이를 위해서는 모든 노드가 부모 노드에 상대적인 (x, y) 위치를 가져야 합니다 . 예를 들어, 캐릭터 는 플랫폼과 관련 하여 (1,0) 에 위치하고 게임 맵과 관련 하여 (10,10)에있을 수 있습니다 . 그렇게하면 플랫폼이 움직이면 캐릭터가 암시 적으로 움직입니다.
이 계층 트리에서 모든 노드의 위치는 그의 위치와 각 부모 노드의 위치의 합과 같습니다. 지도에서 캐릭터의 위치를 얻고 싶다고 가정 해 봅시다. 우리는 다음을 계산합니다.
(캐릭터 위치) + (부모 노드 위치) + (루트 노드 위치) = (1,0) + (10,10) + (0,0) = (11,0)
자, 이번에는 캐릭터가 플랫폼 위에 서있었습니다. 점프는 어때? 음, 그는 점프 순간, 당신은 플랫폼에서 그를 분리 및 플랫폼을 포함하는 노드에 그를 연결 ; 이 경우 맵 (루트 노드)입니다.
그가 다시 착륙 할 때 착륙 한 노드에 부착하십시오.
나는 이것을 의사 물리 문제로 취급하고지면 마찰을 사용하여 해결하는 것이 좋습니다.
캐릭터를 바닥에 고정시키기 위해 이미 중력을 사용하고 있습니다. 플랫폼이 위아래로 움직이는 상황을 처리합니다. 좌우 움직임을 처리하려면지면이 캐릭터에 많은 마찰을 가해 야합니다. 일반적으로이 마찰 수준은 1.0 또는 100 %입니다.
캐릭터가 여전히 서 있으면 속도는 0이고 대신 마찰로 인해 플랫폼 속도의 100 %를 상속합니다. 다음과 같은 것 :
character_velocity = friction * platform_velocity
이 접근 방식의 장점은 가파른 경사면에서의 마찰을 극복하여 캐릭터가 미끄러질 수 있도록하는 등 추가적인 플랫폼 메커니즘에 쉽게 적용 할 수 있다는 것입니다. 또한 캐릭터가 미끄러질 얼음을 만들기 위해 마찰을 쉽게 줄일 수 있습니다.
또한 거는 벽과 같은 문제를 해결하여 플레이어를 움직이는 플랫폼에서 떨어 뜨릴 수 있습니다. 캐릭터를 부모 플랫폼의 자식으로 취급하면 많은 작업없이 나머지 충돌 감지와 쉽게 상호 작용하지 않을 가능성이 큽니다.