Barca che passa sotto un ponte in un RTS basato su piastrelle 2D


10

Sto scrivendo un RTS basato su piastrelle 2D. E voglio aggiungere una funzione 'pseudo 3D' ad esso - ponti sui fiumi.

Non ho ancora avviato alcuna codifica, sto solo cercando di pensare a come si adatta al modello di rilevamento delle collisioni. Una barca che passa sotto il ponte e un'unità che si sposta sul ponte alla fine occuperà la stessa cella sulla mappa. Come impedire che si scontrino?

Esiste un approccio comune per risolvere un simile problema? O devo implementare un mondo 3D per farlo?


bene se stai facendo un sistema basato su tile, puoi aggiungere qualcosa come un metodo "isOccupied" per ogni volta. Basta controllare il bridge sotto se stesso e sopra.
Benjamin Danger Johnson,

2
se le unità di terra non interagiscono con le unità idriche, è possibile gestire collisioni separatamente per entrambi i gruppi di unità. E forse considerare una barca al porto è un'unità di terra per consentire interazioni come il giocatore / un PCN che entra nella barca.
GameAlchemist,

Risposte:


7

Dovrai fondamentalmente creare una terza dimensione, sebbene nel caso più semplice possa consistere solo di due valori: "su terra / su ponte" e "su acqua / sotto ponte".

Un'ispirazione può essere trovata nel modo in cui lo fa il comando strategico avanzato : le unità occupano un livello di altezza specifico, possono muoversi solo su livelli di altezza adatti al loro tipo a meno che non ci siano caratteristiche specifiche che consentano loro di fare diversamente (ad esempio piste per aeromobili) e cambiarli di solito costa punti movimento, con penalità su alcuni livelli di altezza o altri. Una tessera può essere occupata da un numero qualsiasi di unità purché ciascuna abbia un diverso livello di altezza.

In caso di ASC, i livelli sono:

  • spazio
  • alta quota (bombardamento)
  • media altitudine (intercettori)
  • altitudine di attacco al suolo
  • terra (la maggior parte delle unità di terra e hovercraft, anche sull'acqua)
  • acqua
  • parzialmente sommerso (sottomarini)
  • sommerso (sottomarini "nascosti")

9

È possibile aggiungere un attributo semplice a ogni riquadro che ne specifica il livello.

Quindi per esempio:

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();
        }
}

Ora puoi ordinare le tue tessere in base ai loro valori di livello e disegnarle in basso -> in alto! Questo farà sembrare che tu abbia una certa profondità nel tuo gioco. La maggior parte dei motori di piastrelle supporta questo. Un'altra cosa interessante che puoi aggiungere è la trasparenza delle trame in modo da poter vedere fino al livello inferiore.

Questo può essere fatto ad esempio con l'acqua: immagina l'acqua al livello 1 e poi il fondo dell'oceano al livello 0. Se la trama dell'acqua è alquanto trasparente, sarai in grado di vedere il fondo dell'oceano dall'alto.


@aleguna Nessun problema! È divertente dare una mano. :)
Zolomon
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.