2017-03-03 7 views
2

루아에서 프로 시저 생성을 사용하여 2d top down zombie Apocalypse 게임을 만들고 싶습니다.절차 생성을 사용하여 구조로 현실적인 세계 생성하기

다중 노이즈 맵을 사용하여 하이트 맵, 습도 맵 및 온도 맵을위한 2 차원 어레이를 쉽게 얻을 수 있습니다. 실제 맵을 생성하는 데 사용할 수 있습니다.그 작업을 쉽게 할 수 있지만 지연을 줄이려면 맵을 청크로 나누어야하므로 청크를 한 번만 생성합니다. 나도 그 일을 할 수 있지만, 내가 원하는 것은 강과 나무 (숲에 더 많은 나무), 농장과 다른 특별한 건물, 마을, 도시, 도로가있는 거대한 열린 세상이다. ...

나의 현재 다른 구조에 대해 다른 작은 2 차원 배열을 가지고 무작위로 다른 구조체 맵을 배치하는 것이지만 그 방법을 모르겠지만 건물과 도로가 겹칠 수 있으므로 원하지 않습니다. . 그리고 나는 두 개 이상의 덩어리 안에있는 단일 구조를 생성 할 수 있다고 생각하지 않는다. (구조체가지도를 덮어 쓰게 될 것이기 때문에 구조가 어디인가)

어떻게하면 도움이 될 수 있는가? 감사합니다.

+0

'이상적인'지점을 선호하기 위해 높이 맵 매트릭스에 의존 할 수 있습니다. 물 근처에서는 더 크고 산지에서는 더 작습니다. 또한 마을 사이에 약간의 거리가 있어야합니다. –

답변

2

세계는 정적입니까, 동적입니까? 나무가 타 오르고 마을이 파괴되고 다른 곳에서 다시 창조되면 복잡성이 뛰어납니다. 또한 마을 사람들이 존재하고 AI가있는 경우 주변 사람들의 상황을 "알아야"할 수 있습니다. 절차 적 세대에 끈적 거리게 될 수 있습니다.

"트릭"은 세계 청크를 만드는 것이고, 새 청크가 만들어지면 구조 데이터를 생성하고 저장하는 것입니다. 이 작업은 "경계"기능으로 수행 할 수도 있습니다. 플레이어가 청크 A에 있으면 백그라운드에서 생성되지 않은 청크를 생성하고 저장합니다.

배치 구조는 간단해야합니다. 구조체의 청크 (Chunk) ID 및 청크 (Chunk-specific) xy 좌표 만 있으면 그 구조를 배치 할 수 있습니다. 구조체 배치 충돌 감지를 돕기 위해 구조체 "영역"너비와 높이를 포함 할 수 있습니다. 예를 들어, 농장에 울타리가 있으면, 펜싱을 바로 그 곳에 놓고 플레이어가 걸어 다닐 수 있습니다. 동굴 입구가있는 산에있는 지하 감옥과 같은 경우, 플레이어가 상호 작용할 때 플레이어를 던전에 넣는 '입구 구조'가 필요합니다.

이러한 메커니즘을 익히는 작업은 부터으로 엄청나게 커졌습니다. 2x2 또는 3x3 청크 세상에서 먼저 작업하고 그 안에 개별적으로 구조를 테스트하십시오. 이것은 게임 플레이가 아마 풍경보다 더 많은 이들 구조를 중심으로 회전 할 것이기 때문에 처음에는 풍경 결정보다 중요합니다.

루아는 게임을 실현하기에 좋은 선택이지만 C/C++에서 절차 생성/구조 레이아웃/etc를하고 싶을 것입니다. Use C/C++ to do the heavy lifting like the procedural generation을 입력하고 Lua/LOVE이 소모하는 C-call으로 바꿉니다. Here's some code은 2D 탑 다운이 아니지만 생성, 타이밍 등을 고려하여 도움이 될 수 있습니다. Lua/LOVE의 Here's a city generator 스탠포드 (Stanford)의 More on map generationStackoverflow post이있다. NPC movement in 2d map.

재미있게 보내세요!

+0

_why_에서 조금 더 자세히 설명해 주시겠습니까? C/C++이 이러한 작업에 더 좋습니다. –

+0

@MikeLyons 반드시 좋을 것은 아닙니다. 알고리즘은 알고리즘입니다.그러나 위의 느슨한 제안에 따르면 더 많은 기능이 세계 세대에 통합됨에 따라 처리 부담이 커지고 게임 성능을 위해 간단하게이 기능이 필요할 것입니다. 특히 루아를 사용하여 생성 알고리즘을 좀 더 쉽게 만들 수 있습니다. 특히 언어에 익숙하지 않은 경우라면 궁극적으로 세대가 복잡 해짐에 따라 성능이 크게 향상 될 것입니다. – ZagNut

+0

@MikeLyons (con't) 퍼포먼스가 떨어지기 시작하면 인계하기 위해 더 낮은 레벨이 필요합니다. C/C++ 일 필요는 없습니다. Lua 바인딩이있는 저수준 언어를 사용할 수 있습니다. 또한 숙성 된 두뇌에서 이렇게 생각하고있을 때 추가해야합니다. "실시간"절차 생성 (예 : 청크가 요청에 따라 재구성되고 메모리에 준비 됨)을 생각하고 있습니다. 청크가 디스크의 정적 데이터 인 경우 해당 데이터에 대한 상태 변경 (예 : 지상 타일의 구멍 파기) 만 추적하면됩니다. – ZagNut