Implementazione della piastrellatura automatica di RPG Maker


8

Attualmente sto lavorando con Phaser, realizzando un gioco generato proceduralmente. Volevo usare un po 'di arte del creatore di giochi di ruolo nel mio gioco (per riferimento, sto usando l'RTP). Mi sono imbattuto in questo articolo , che spiega come funzionano le tessere automatiche. Mi sono anche imbattuto in questa risposta che collega ad un altro articolo che spiega la piastrellatura automatica.

Ecco la cosa, non ho idea di come implementerei qualcosa del genere. Sono sicuro che dovrei tenere traccia di quali set di tessere possono connettersi a quali altri set di tessere (ad esempio, alcune tessere hanno erba all'esterno e sabbia all'interno, quindi in questo esempio dovrei notare che "erba "le piastrelle erano le piastrelle esterne).

Ho creato un generatore di mappe (vedi qui ) e volevo creare connessioni senza soluzione di continuità tra le mie aree di piastrelle. Ad esempio, le aree marroni sarebbero aree "dense" (foreste, grotte, ecc.). Le aree viola sarebbero pavimenti in pietra e l'area verde è l'erba. C'è un set di tessere che funziona molto bene per cose come questa:

inserisci qui la descrizione dell'immagine

Quindi vorrei usare l'erba in alto a sinistra e il terzo set di tessere, in pietra, che si collega all'erba.

Quali cose dovrei prendere in considerazione durante l'implementazione della piastrellatura automatica usando questo tipo di set di tessere e c'è un algoritmo che posso guardare per implementare?



Tiled è un editor di mappe open source che ha un'implementazione auto-tile. Potresti provare a trovare l'implementazione nel codice sorgente .
Philipp

I paradigmi di auto-compilazione di @Philipp Tiled's e RPGMaker sono però diversi. Piastrellato ti consente di specificare i quattro angoli di una tessera come un tipo di terreno specifico ("sabbia", "erba", "acqua" e così via) e seleziona una tessera corrispondente sulla base di ciò. RPGMaker ti consente di specificare che i centri della tessera sono una specifica variante tipo-circondato-da-tipo (ad esempio "sabbia dentro l'erba", "acqua dentro l'erba" e così via). I livelli vengono utilizzati per gestire questa limitazione in entrambi i casi. Una trasformazione è possibile, ovviamente; qui ad esempio usando REFMAP sand-inside-grass (con imbottitura in erba): i.imgur.com/Z343MVq.png
Martin Sojka,

2
Per la cronaca, le risorse RTP sono concesse in licenza solo per l'uso con i rispettivi software e altre versioni di RPG Maker. E 'bene come segnaposto durante lo sviluppo, ma sarà necessario sostituirli con una serie grafica differente per la distribuzione - per esempio il set REFMAP o la grafica in base alla Liberato Pixel Cup.
Martin Sojka,

Grazie per l'informazione @MartinSojka - Nel bene o nel male, il produttore di giochi di ruolo fornisce la migliore serie completa di opere d'arte con cui lavorare (tessere, volti, sprite, effetti, ecc.), Ma sto limitando ciò che uso, solo così posso coprire le mie basi quando arriva il momento di sostituirle. Non volevo passare ore a cercare arte quando potevo programmare. Grazie per le informazioni su Liberated Pixel Cup, lo esaminerò più avanti. FWIW, non ho intenzione di vendere questo gioco, ma se lo farò sicuramente sostituirò l'arte.
Seiyria,

Risposte:


1

Ho implementato questo (usando l'RTP) in un modo semplice (ma abbastanza noioso).

Ho preso un elenco di tutti i vicini per la cella corrente e con molte ifaffermazioni ho disegnato la tessera come 4 tessere più piccole / quarti.

Per me questo metodo porta ad alcuni errori appena visibili, ma possono essere risolti testando alcuni casi limite e correggendo di conseguenza.

Se guardi le immagini di origine e l'immagine risultante nel creatore di giochi di ruolo, dovresti essere in grado di farlo (forse con qualche prova ed errore) con le ifdichiarazioni, identificando quale sia il caso corrente per il quarto riquadro dato e disegnando di conseguenza .

Questo metodo può essere ulteriormente migliorato e reso meno noioso con le maschere di bit (come menzionato da jzx).


Rispondere al tuo commento:

Eseguendo il rendering di solo un quarto di riquadro, le possibilità diminuiscono drasticamente.

Non dovresti dover gestire tessere su tessere, in quanto dovrebbero trovarsi su livelli diversi in ordine alfabetico o con colori chiave l'uno sull'altro.

Inoltre, non vedo perché avresti bisogno di vicini integrati, ma che potrebbero essere gestiti separatamente nel calcolo del vicino, forse usando una sorta di mappe (elenco di coppie che si fondono).

La mappa è generalmente statica e le immagini sono a bassa risoluzione, quindi non è necessario preoccuparsi delle prestazioni.


Mi piaceva molto usare le maschere di bit, finché non ho visto che la complessità aumenta con ogni possibile piastrella vicina. Guardando l'RTP, non riesco a raccogliere quanti possibili casi ci sarebbero, dato che alcune tessere possono essere impilate su altre tessere e alcune tessere hanno vicini incorporati.
Seiyria,

@Seirya Risposta modificata.
Akaltar

grazie per l'aggiornamento. Una cosa, però: se guardi il set di tessere sopra, puoi vedere alcune tessere con vicini incorporati, come le piastrelle di sabbia sull'erba o di pietra sull'erba. Per alcune piastrelle come quelle ad acqua, che possono essere posizionate su qualsiasi cosa, questo non è davvero un problema.
Seiyria,
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.