Bateau passant sous un pont dans un RTS 2D à base de tuiles

10

J'écris un RTS basé sur des tuiles 2D. Et je veux y ajouter une fonction «pseudo 3D» - des ponts sur les rivières.

Je n'ai pas encore commencé de codage, j'essaie juste de penser comment cela correspond au modèle de détection de collision. Un bateau passant sous le pont et une unité se déplaçant sur le pont finiront par occuper la même cellule sur la carte. Comment les empêcher de se heurter?

Existe-t-il une approche commune pour résoudre un tel problème? Ou je dois implémenter un monde 3D pour ce faire?

aleguna
la source
Eh bien, si vous faites un système basé sur des tuiles, vous pouvez ajouter quelque chose comme une méthode "isOccupied" pour chaque fois. Faites vérifier le pont en dessous et au-dessus.
Benjamin Danger Johnson
2
si les unités terrestres n'interagissent pas avec les unités aquatiques, vous pouvez gérer séparément les collisions pour les deux ensembles d'unités. Et peut-être considérez-vous qu'un bateau au port est une unité terrestre pour permettre des interactions comme le joueur / un PNJ entrant dans le bateau.
GameAlchemist

Réponses:

7

Vous devrez essentiellement créer une troisième dimension, bien que dans le cas le plus simple, elle puisse se composer de deux valeurs: "au sol / sur le pont" et "sur l'eau / sous le pont".

Une inspiration peut être trouvée dans la façon dont le commandement stratégique avancé le fait: les unités occupent un niveau de hauteur spécifique, ne peuvent se déplacer que sur des niveaux de hauteur adaptés à leur type, sauf s'il existe des caractéristiques spécifiques leur permettant de faire autrement (par exemple des pistes pour avions) et les changer coûte généralement des points de mouvement, avec des pénalités à certains niveaux de hauteur ou à d'autres. Une tuile peut être occupée par un nombre illimité d'unités tant que chacune est à un niveau de hauteur différent.

En cas d'ASC, les niveaux sont:

  • espace
  • haute altitude (bombardement)
  • altitude moyenne (intercepteurs)
  • altitude d'attaque au sol
  • sol (la plupart des unités terrestres et aéroglisseurs, même au-dessus de l'eau)
  • eau
  • partiellement submergé (sous-marins)
  • submergé (sous-marins "cachés")
Martin Sojka
la source
9

Vous pouvez ajouter un attribut simple à chaque mosaïque qui spécifie son niveau.

Ainsi, par exemple:

tileA.layer = 0 // Will be at the bottom
tileB.layer = 1 // Will be above level 0, on top of it. 

// Add tiles to layered list
List<List<Tile>> tiles = new List<List<Tile>>();
tiles[0].add(tileA);
tiles[1].add(tileB);

// Draw 'em in the right order!
void Draw(List<List<Tile>> tiles) {
    foreach( var listOfTiles in tiles ) {
        foreach( var tile in listOfTiles ) {
            tile.draw();
        }
}

Vous pouvez maintenant trier vos carreaux en fonction de leurs valeurs de calque et les dessiner en bas -> en haut! Cela donnera l'impression que vous avez une certaine profondeur dans votre jeu. La plupart des moteurs de tuiles le supportent. Une autre chose intéressante que vous pouvez ajouter est la transparence de vos textures afin que vous puissiez voir à travers le calque inférieur.

Cela peut être fait avec de l'eau par exemple - imaginez l'eau au niveau 1 et ensuite le fond de l'océan au niveau 0. Si la texture de l'eau est quelque peu transparente, vous pourrez voir le fond de l'océan d'en haut.

Zolomon
la source
@aleguna Pas de soucis! C'est juste amusant d'aider. :)
Zolomon