무한 레벨의 절차 적 생성


16

무한 2D 레벨을 절차 적으로 생성하는 좋은 방법은 무엇입니까? 레벨은 어느 차원에서나 제한 될 수 있지만 반드시 그런 것은 아닙니다.

지금까지 내게 가장 적합한 방법은 그리드 기반 반경을 사용하는 것입니다. 예를 들어, 플레이 영역을 특정 크기의 사각형이있는 격자로 나누고 플레이어 주위의 반경에 X 사각형을로드하십시오. 그런 다음 플레이어가 다른 정사각형으로 이동하면 다음 세트를 만들고 더 멀리 떨어 뜨립니다. (탐색 영역을 유지할 필요는 없습니다.) 정사각형을 만들면 임의의 개체 배열이 포함됩니다. 물체가 사각형의 바깥 고리를 벗어나면 세상에서 제거됩니다. 더 나은 또는 다른 방법이 있습니까? 또는 이것이 좋은 접근 방법이라면 잠재적 인 문제는 무엇입니까?

토론을 위해 레벨을 파워 업 등이있는 하향식 소행성 필드로 생각할 수 있습니다.


2
관련이있는 것 같습니다 : gamedev.stackexchange.com/questions/2230/…
jacmoe

^ 따라서 오른쪽의 "관련"열에 있습니다. 연결할 필요가 없습니다.
20:53에 Ricket

7
그리고 "관련된"뿐만 아니라 "연결된"것이되었습니다. :)
jacmoe

답변:


6

"무한"세계의 문제점은 기본 좌표가 무한하지 않을 수 있다는 것입니다. 예를 들어 정수 랩에 도달하는 시간이 너무 길어서 도달 할 수없는 경우가 있기 때문에 게임이 플레이어의 속도를 충분히 느리게하는 경우 문제가되지 않을 수 있습니다. 그러나 속도의 높은 차이를 허용하는 경우 좌표에 대해 생각해야하는 매우 정밀하고 멀리 도달해야 할 수도 있습니다. 합리적인 수정은 격자의 정수 좌표와 각 격자 참조의 부동 좌표와 같은 두 가지 수준을 갖는 것입니다.

따로, 그리드 좌표를 시드로 사용하여 주어진 사각형에 임의의 세계를 만들면 세계의 레이아웃을 올바르게 유지할 수 있습니다. 따라서 플레이어가 해당 지역을 떠날 때 떨어 뜨릴 수 있으며 플레이어가 돌아 오면 시드에서 다시 생성 할 수 있습니다.


4
이 문제는 때때로 세상을 중심으로 우회 할 수 있습니다.
Jonathan Fischoff

또한 정수 랩 어라운드뿐만 아니라 부동 소수점 수가 높을 때 작은 부동 소수점 변경의 부정확성을 인식하십시오. 이것을보십시오 : float pos = 1000000000.0f; float nextPos = pos + 0.001f; float diff = nextPos - pos; 내 컴퓨터에서 diff는 0입니다.
tenpn

이것들은 모두 좋은 지적입니다. 나는 충분히 효율적인 한 새로운 사각형 세트가 생성 될 때마다 좌표를 최신 화하는 것이 적절하다고 생각합니다.
Colin Gislason

덧붙여 이것은 Minecraft의 PC 버전에서와 동일한 솔루션입니다 :) 고정 정수 + float에 대한 +1 + 내 생각에는 최고의 솔루션입니다
GameDeveloper
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.