Lo spawning di elementi è una costante di moltissimi giochi (si usa anche nei giochi più semplici).
Per fare questo ci serviranno le seguenti scene:
- l'oggetto da riprodurre
- l'oggetto che gestisce la produzione di elementi
Prendiamo ad esempio un gioco di carte. Ho l'oggetto Carta, l'oggetto Mazzo ed il Board (sono tre scene con i dettagli all'interno).
Ognuno di questi nodi avrà il suo script collegato.
Carta
Nello script, andrà creata la funzione initialize() che configurerà il contenuto, ma al momento non concentriamoci sul suo funzionamento.
Mazzo
Lo script del mazzo prevede alcuni elementi importanti (il numero di carte, l'array con le carte all'interno, etc) ed una variabile fondamentale:
@export var cardNode: PackedScene
Questa variabile contiene la scena che andrà "duplicata" per generare tutte le carte del mazzo, e con @export sarà possibile associare il nodo desiderato direttamente dall'editor della scena.
Questa è la funzione per la creazione di tutte le carte (nell'esempio, facciamo 32 carte):
func initialize() -> void:
for i in range(self.numMaxCards):
var c: Node2D = self.cardNode.instantiate()
# al momento passo il contatore, ma si può caricare tutti i dati
# per "generare" la carta
c.initialize(i)
c.visible = false
# aggiunge la carta al mazzo
self.cardsInDeck.append(c)
# mescola il mazzo
self.cardsInDeck.shuffle()
Ci sono poi altre funzioni che servono a gestire il mazzo (numero di carte rimaste / pesca una carta / etc).
Board
Per la scena Board, nella funzione _ready() (o reset, se serve), bisogna instanziare il mazzo e poi inizializzarlo.
A questo punto, il mazzo conterrà il numero di nodi Carta voluto, ognuno con il suo dettaglio.
Nessun commento:
Posta un commento