2011-10-11 1 views
3

Je pensais faire un jeu 2D descendant avec un monde généré par une procédure pseudo-infinie. J'ai lu plusieurs articles sur la génération procédurale et, peut-être je les ai mal compris ou mal compris, mais je n'ai pas encore rencontré un expliquant comment diviser le monde en morceaux (comme le fait apparemment Minecraft).Comment diviser un monde généré par une procédure d'exécution en blocs

De toute évidence, je n'ai besoin de générer que la partie du monde que le joueur peut actuellement voir. Si mon jeu est basé sur des cases, par exemple, je pourrais diviser le monde en morceaux n * n. Si le joueur était à la frontière d'un tel morceau, je générerais également le ou les morceaux adjacents.

Ce que je n'arrive pas à comprendre, c'est comment exactement je prends un algorithme de génération de processus procédural et ne l'utilise que sur un morceau à la fois. Par exemple, si j'ai un algorithme qui génère une grande structure (par exemple château, forêt, rivière) qui se propagerait à travers de nombreux morceaux, comment puis-je l'ajuster pour générer un seul morceau, et ensuite les morceaux adjacents? Je m'excuse si j'ai complètement manqué quelque chose d'évident.

Merci d'avance!

Répondre

4

Etudiez le Midpoint displacement algorithm. Notez que les points tout le long d'un côté sont basés sur les valeurs de départ des coins. Vous pouvez les calculer sans connaître le reste de la grille. J'ai utilisé cette approche pour générer du terrain. J'avais besoin que les bords de chaque 'morceau' de terrain s'alignent avec les morceaux adjacents. En utilisant une variation de l'algorithme de déplacement Midpoint, je l'ai fait de sorte que la hauteur de chaque point le long du bord d'un morceau a été calculée en se basant uniquement sur les valeurs aux deux coins. Si j'avais besoin d'ajouter un caractère aléatoire, j'ai ensemencé un générateur de nombres aléatoires avec des données provenant des deux coins. De cette façon, deux blocs adjacents quelconques pourraient être générés indépendamment et les bords seraient sûrs de correspondre.

Vous pouvez utiliser des approches pour les cartes de hauteur pour d'autres choses. Au lieu de la hauteur, les données pourraient déterminer le type de végétation, la densité de population, etc. Au lieu d'une carte de hauteur où les collines et les vallées correspondent, vous pouvez avoir une carte de végétation où les forêts correspondent.

Il faut certainement une programmation créative pour tout type de monde complexe.

+0

Merci beaucoup! Je vais regarder dedans. – liviucmg

+0

+1 pour le déplacement du milieu. C'est un très bon point de départ car il est très facile à implémenter et à comprendre (et aussi très rapide). Ce n'est que si les artefacts que vous obtenez à partir du déplacement du point médian deviennent un problème, il peut être utile de se pencher sur perlin ou le bruit simplex qui sont beaucoup plus complexe et non intuitif de travailler avec. – Arahman

Questions connexes