Faire des murs dans des jeux à base de tuiles: qu'est-ce qui me manque?

25

Après avoir passé du temps aujourd'hui à prendre quelques notes concernant la mise en œuvre des murs dans mon jeu basé sur les tuiles, j'ai soudain réalisé que ça ne sera pas aussi simple que je l'imaginais auparavant. Bien que l'étape actuelle de mon travail ne soit même pas proche de la création du code lié au mur, j'ai trouvé trois façons différentes de le faire. En ce moment, je ne sais pas laquelle de mes idées fonctionnera le mieux et si j'ai raté quelque chose ou non.

Important: un personnage PEUT se tenir sur une tuile qui a des murs, quelle que soit leur forme.

La chose commune pour les trois variantes: le tilemap sera "conservé" dans un conteneur std :: vector (ou similaire) à dimension unique. Les raisons de cela sont (énormément) expliquées dans les réponses à une autre question.

Classes de conteneurs dans les jeux à base de tuiles.

Retour aux murs.

A) L'approche simple.

Rien d'extraordinaire ici. Chaque conteneur de tuiles peut contenir non seulement des personnages, mais un ou plusieurs objets Mur, qui sont attachés au bord à l' intérieur de la tuile.

Première approche

Avantages: facile à mettre en œuvre, rien à changer dans le moteur. Inconvénients: deux choses. Un - cela pourrait être juste dans ma tête, mais certaines combinaisons ont l'air moche. Deuxièmement - cette approche permet de réaliser une double paroi à partir de deux tuiles adjacentes. La construction sera une partie importante du jeu, et les doubles murs permettent aux constructeurs de renoncer éventuellement à la mise à niveau du matériau des murs par des moyens de jeu, et d'atteindre simplement une durabilité accrue en doublant le mur existant. Ce n'est pas souhaitable. Bien sûr, je pourrais inclure une procédure qui interdit la double paroi, mais elle aura une mauvaise impression.

B) L'approche intelligente (?).

Au lieu de laisser les joueurs doubler la carte entière, je vais les battre. Chaque mur a deux moitiés qui sont attachées au bord de la tuile de l'intérieur. Donc, pour faire une seule "unité murale", je devrai créer deux objets demi-mur dans deux tuiles adjacentes.

Deuxième approche

Avantages: C'est symétrique !!! De plus, aucun changement significatif des spécifications actuelles du moteur n'est nécessaire. Inconvénients: Plus de tracas, plus d'objets et, bien sûr, les "casquettes". Comme vous pouvez le voir sur l'image, un coin pleurera essentiellement pour un objet "cap". Je suis vraiment cool avec ça, ce n'est pas si difficile à ajouter. Hé, j'ai déjà un plan pour des colonnes minces faites de quatre bouchons connectés. Doux. Néanmoins, j'ai quelques inquiétudes concernant d'éventuels problèmes de champ de vision et de ligne de vue.

C) La variante de révision totale.

Ou, je pourrais simplement créer des bordures et des coins en tant que conteneurs séparés pour les objets de jeu. Juste comme ça.

Troisième approche

Avantages: Pas même sûr. Eh bien, c'est simple. Absolument. Inconvénients: Cela nécessitera une refonte. Pas de code, heureusement, mais de la mentalité de mécanique de jeu actuelle - c'est sûr. Les avantages ne sont pas si évidents. De plus, cette approche nécessite beaucoup plus de conteneurs que les deux précédents. Les mathématiques d'indexation seront également un peu pénibles.

Nous l'avons donc ici - trois façons distinctes de faire des murs entre les carreaux. S'il existe des alternatives - je serai heureux de les vérifier. S'il y a des avantages / chutes à l'une des approches que je n'ai pas vues - veuillez les signaler.

norien
la source
2
A.2: En tant que A, seuls deux côtés - par exemple, le nord et l'ouest - peuvent avoir un mur. C'est l'approche qu'utilise X-Com.
Martin Sojka
@Martin Sojka Cela laisse un trou aux coins sud-est. Pourtant, il peut être utile de considérer le modèle C de cette façon, chaque tuile peut avoir une combinaison de trois éléments de mur différents, noth, coin ouest et nord-ouest.
aaaaaaaaaaaa
Donc les murs sont visibles, je suppose? Non seulement bloquer les bords des carreaux. Pourquoi avez-vous besoin de deux moitiés dans l'option B? Pourquoi pas un simple mur à moitié décalé sur l'autre carreau?
Richard Marskell - Drackir
@eBusiness, si vous autorisez uniquement les murs au nord et à l'ouest, vous pouvez simuler des murs au sud et à l'est en plaçant simplement des murs au nord et à l'ouest des carreaux en dessous d'eux.
Tetrad
Je suggère d'aller avec C. C'est ce que je fais dans ce jemgine.omnisu.com/wp-content/uploads/2011/06/gnomecolony.png et cela fonctionne plutôt bien. Le seul problème est l'extrême sud / est de la carte. Vous devrez faire quelque chose à ce sujet.
Blecki

Réponses:

14

J'utiliserais votre méthode 'B'.

Pour éviter d'avoir besoin de «bouchons», il suffit d'étendre chaque paroi «1/2 épaisseur de paroi» dans les deux sens. Cela créera des murs qui se chevauchent là où ils se rencontrent, mais vos diagrammes suggèrent déjà que ce n'est pas un problème.

Ainsi, dans la méthode 'B', photo n ° 3, le mur horizontal s'étendrait un peu à gauche et le mur vertical s'étendrait un peu.

[Je suis nouveau ici, je viens de m'inscrire. Suis-je en train de manquer quelque chose, car je ne vois pas de bouton "Ajouter un commentaire" à votre message d'origine. Est-ce un privilège pour les personnes de réputation plus élevée? Ou est-ce que je néglige l'évidence? Désolé d'avoir ajouté ceci comme «réponse».]

Doug.McFarlane
la source
1
Ceci est une réponse, et je crois que c'est un niveau de réputation de 100 (?) À commenter. Bienvenue sur le Gamedev SE! :)
The Communist Duck
2

Vous avez remarqué qu'un personnage peut se tenir sur une tuile contenant un mur, mais avez-vous envisagé de traiter chaque tuile comme un mur lui-même? Même une demi-tuile comme mur de façon horizontale ou verticale?

Avantages: Les calculs et les placements sont triviaux, les collisions sont triviales où tous les calculs et collisions sont uniquement basés sur les coordonnées du placement des murs.

Inconvénients: cela pourrait avoir un impact sur votre implémentation, votre code et vos graphiques. Vous ne voulez pas non plus abandonner totalement votre méthode, vous voulez toujours des cas particuliers où seule une partie d'une tuile est un mur (Lien vers le passé avec des falaises).

C'est ainsi que j'aurais basé mon implémentation, à l'avenir, sachant que je peux toujours référencer une tuile et effectuer un calcul en fonction de l'emplacement de mes personnages et de quel type de tuile il s'agit.

Un mur de château, je pouvais simplement effectuer un calcul à partir du centre en dessinant une boîte que je ne pouvais pas traverser ou si c'était un rocher rond, je pouvais faire le même calcul à partir du centre mais comme un cercle afin que mon personnage puisse se déplacer comme il était arrondi.

Bryan Harrington
la source
1

Désolé de le dire, mais la troisième façon est vraiment la façon de penser, eh bien, vous avez déjà la possibilité de le faire, alors allons de l'avant et réfléchissons aux deux autres!

Le fait est qu'un mur est un carré de largeur nulle, deux dimensions (hauteur * longueur, dans un monde 3D) divisant deux boîtes. Vous devez les considérer comme tels, mais vous pouvez utiliser une solution plus simple pour construire votre donjon (surtout si d'autres personnes peuvent construire des pièces).

Il semble que ce soit un jeu 2D de haut en bas où les murs ont "une largeur", donc ils ont besoin de ce coin (votre objet "cap"). Il s'agit exclusivement de «graphiques», donc j'irais avec une sorte de:

Une carte 2D avec les tuiles (ie. Type de tuile et autres).

Une carte 2D avec 2 murs, ex. en bas et à droite (le mur de gauche sera le «mur de droite» dans la tuile à gauche de celui-ci).

+ une logique qui dessine tous les murs et les 'casquettes' etc.

Séparant ainsi la logique et le graphisme. Vous pourriez faire une "interface" en prenant soin de choses comme SetWall (ThisTile, LEFT, NOWALL) -> définir le mur droit de la tuile gauche de ThisTile sur "NOWALL" ...

Peut-être que cela semble flou, mais le fait est que vous devez toujours essayer d'avoir d'un côté la logique (les données réelles, sans redondance) et de l'autre le `` dessin des données '' qui calcule s'il y a besoin d'un `` plafond ' etc.

++

Valmond
la source