Generatori di nemici

La funzione “spawn another object“, come abbiamo visto, ci consente di creare degli oggetti da altri oggetti, potremmo immaginare molteplici scenari, dalla pistola che lancia un proiettile, ad una tomba che fa nascere tantissimi scheletri.

Nel mio progetto, ho pensato di inserire dei cespugli, ogni tot secondi, daranno vita ad un nuovo nemico, fin quando ne avranno generato un limite massimo di 5, come prima cosa andate a scegliervi lo spawner, può essere un albero, una pietra qualunque cosa, il mio è il cespuglio in immagine:

Inseritelo come sprite, impostate il punto d’ origine in una direzione a vostro piacimento,ed andiamo a creare una variabile di istanza, io l’ ho chiamata “bushspawn”, e come valore assegnamo zero.

Adesso nell’ event sheet click su “add new event” scegli “system“, scegli “every x second“,  scrivi “7“, click su add action e scegli “cespuglio“, scegli in istance variable “add to“, mettete la variabile creata prima, “bushspawn“, value “1“.

Con questa istruzione diciamo al sistema: ogni 7 secondi aumenta di 1 il valorre dell’ istanza “bushspawn“, selezioniamo adesso l’ evento appena creato e premiamo il tasto “s” per creare un subevent.

Scegli “cespuglio“, scegli “compare istance variable“, in istance variable mettete la variabile creata prima, in comparison scegli “less than <“, in value scrivi “5“, click su “add action“, scegli “cespuglio“, scegli “spawn another object“, scegli l’ oggetto da generare che nel mio caso è un lumaca, in layer scegli “1” in imagepoint scegli “0“.

L’ istruzione completa nell’ immagine sotto:

Proiettili vaganti

Un’ altra cosa importante, sono i proiettili che lanciamo, attualmente distruggono i nemici, ma quelli sparati a vuoto, passano attraverso i tiles, uscendo dalla schermata del livello di gioco.

Questo non è un bene, poichè come gia detto in passato se non distrutti occupano memoria, ricordate sempre di porvi la domanda, quest’ oggetto creato, se non ha il comando “destroy“, che fine farà? semplice, occuperà memoria, andiamo ora a limare questi difetti.

Add event poi scegli “proiettile“, segli “is outside of layout” add action e scegli “proiettile“, scegli destroy. Ora in caso il nostro proiettile esca dal layout sarà distrutto.

Add event poi scegli “proiettile“, scegli “on collision whit another object“, scegli “tile“, add action e scegli “proiettile“, scegli “spawn another object” scegli “impatto” scrivi in layer “1“, in image point “0“, inseriamo un altra azione quindi scegli “proiettile“, scegli “destroy“.

In questo caso, prima di distruggerlo io gli ho dato l’ animazione dell’ impatto, fatelo anche voi, nell’ immagine l’ istruzione completa.

Come vedete ho 2 istruzioni per i tiles, questo perchè uno è di un tipo, l’ altro invece è un clone della cornice. Se vi ricordate, nelle lezioni precedenti per dare il behavior “jump thru”.

La funzione “clone object type“, ci permette di copiare un oggetto dello stesso tipo, ma che debba portare con se altre caratteristiche, per altri dettagli ed esempi a riguardo li trovate nella lezione N°. 11.

Ed avendo tiles diversi ho dovuto includere anche l’ altro tiles, ma voi se state inventando qualcosa, create secondo le vostre esigenze tutti i casi dove il proiettile debba essere distrutto, proseguiamo con la lezione N°. 16.