플랫폼 게임에서 움직이는 플랫폼을 어떻게 처리합니까?


15

box2d 또는 다른 것을 사용하고 싶지 않고 단순한 이동 플랫폼 (위, 아래, 오른쪽, 대각선 및 원형 경로) 만 원합니다. 내 질문은 업데이트 순서 / 제어 계층을 처리하여 플레이어가 튀어 나오거나 흔들리지 않고 플랫폼에 단단히 고정되어 있습니까?

답변:


16

내 솔루션은 게임 맵의 모든 물리적 개체를 트리 노드 로 취급하고 맵 자체를 루트 노드로 취급하는 것 입니다. 노드는 다른 노드를 포함 할 수 있습니다. 모든 노드는 맵 노드 내에 (직접 또는 간접적으로) 포함됩니다.

예를 들어, 캐릭터가 플랫폼 위에 서 있다고 가정 해 봅시다. 플랫폼의 노드는 캐릭터의 노드를 포함합니다. 따라서 플랫폼이 이동할 때마다 플랫폼에 포함 된 노드 (이 경우 캐릭터)도 이동합니다.

이를 위해서는 모든 노드가 부모 노드에 상대적인 (x, y) 위치를 가져야 합니다 . 예를 들어, 캐릭터 는 플랫폼과 관련 하여 (1,0) 에 위치하고 게임 맵과 관련 하여 (10,10)에있을 수 있습니다 . 그렇게하면 플랫폼이 움직이면 캐릭터가 암시 적으로 움직입니다.

이 계층 트리에서 모든 노드의 위치는 그의 위치와 각 부모 노드의 위치의 합과 같습니다. 지도에서 캐릭터의 위치를 ​​얻고 싶다고 가정 해 봅시다. 우리는 다음을 계산합니다.

(캐릭터 위치) + (부모 노드 위치) + (루트 노드 위치) = (1,0) + (10,10) + (0,0) = (11,0)

자, 이번에는 캐릭터가 플랫폼 위에 서있었습니다. 점프는 어때? 음, 그는 점프 순간, 당신은 플랫폼에서 그를 분리플랫폼을 포함하는 노드에 그를 연결 ; 이 경우 맵 (루트 노드)입니다.

그가 다시 착륙 할 때 착륙 한 노드에 부착하십시오.


1
또한 노드에서 x 및 y 속도를 사용하여 플레이어에 영향을 미칩니다. 예 1 : 플랫폼이 정말 빠르게 움직이며 멈 춥니 다. 플레이어는 상승 모멘텀을 가지고 시작됩니다. 예 2 : 플레이어가 치명적인 속도로 떨어지는 것보다 플랫폼이 약간 느리게 이동합니다. 플랫폼은 SPLUT
AttackingHobo

그것은 흥미로운 접근 방법이지만 움직이는 플래터를 허용하기 위해 내 엔진을 완전히 바꿔 놓은 것처럼 보입니다. 어쩌면 objectOnPlatform을 일시적 으로이 효과를주는 객체에 대해 구성 요소로 만들면 어떨까요?
Iain

10

나는 이것을 의사 물리 문제로 취급하고지면 마찰을 사용하여 해결하는 것이 좋습니다.

캐릭터를 바닥에 고정시키기 위해 이미 중력을 사용하고 있습니다. 플랫폼이 위아래로 움직이는 상황을 처리합니다. 좌우 움직임을 처리하려면지면이 캐릭터에 많은 마찰을 가해 야합니다. 일반적으로이 마찰 수준은 1.0 또는 100 %입니다.

캐릭터가 여전히 서 있으면 속도는 0이고 대신 마찰로 인해 플랫폼 속도의 100 %를 상속합니다. 다음과 같은 것 :

character_velocity = friction * platform_velocity

이 접근 방식의 장점은 가파른 경사면에서의 마찰을 극복하여 캐릭터가 미끄러질 수 있도록하는 등 추가적인 플랫폼 메커니즘에 쉽게 적용 할 수 있다는 것입니다. 또한 캐릭터가 미끄러질 얼음을 만들기 위해 마찰을 쉽게 줄일 수 있습니다.

또한 거는 벽과 같은 문제를 해결하여 플레이어를 움직이는 플랫폼에서 떨어 뜨릴 수 있습니다. 캐릭터를 부모 플랫폼의 자식으로 취급하면 많은 작업없이 나머지 충돌 감지와 쉽게 상호 작용하지 않을 가능성이 큽니다.


0

플레이어의 위치를 ​​"레벨에서 절대적인"것이 아니라 "플랫폼에 상대적으로"고정한 다음 실제 위치를 제공하는 기능을 가질 수 있습니다. 나는 이것을 좋아하지 않는다.

플랫폼을 + x / + y로 움직일 때 플레이어가 많이 움직일 수 있도록 플레이어를 플랫폼에 바인딩하는 것이 더 좋고 더 간단 할 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.