Avendo poco tempo da poter dedicare allo sviluppo con bennu, non posso darti suggerimenti ottimi
A parte le battute, non mi è chiaro che comportamento vuoi 'attivare' in caso di collisioni.
1) Supponendo di non voler far nulla, ma solo scalare di una unità le vite a disposizione, potresti modificare il tuo test di collisioni nel seguente modo:
Code: Select all
if (collision(type muro))
if(invincibile==0)
vite=vite-1; //diminuisce 1 vita
//x=400; //respawna all origine
//y=100;
invincibile=1; //diventa invincibile
//frame(3000); //passano deltempo
//invincibile=0; //ritorna normale
end
else
invincibile=0; //ritorna normale
end //Se sbatti col muro muori
Praticamente ho tolto il riposizionamento del personaggio e i vari ritardi, inoltre sfrutto la variabile invincibile per ignorare ulteriori collisioni sino a quando il personaggio ha superato completamente il muro che gli ha fatto perdere una vita.
In questo modo le vite vengono decrementate solo alla collisione con un nuovo muro, o con lo stesso ma solo se ci si sposta in alto e poi si colpisce nuovamente lo stesso muro. (Guardati i due IF e l'ELSE per capire la logica del 'controllo').
2) Non è chiarissimo cosa vuoi fare con il processo genera, da quello che ho capito semplicemente lo utilizzi per il posizionamento dei muri basandoti sulla variabile 'parte' per decidere quale elenco di muri 'posizionare'.
Se ho capito correttamente, io modificherei il processo in una funzione in quanto non mi sembra logico che il processo di generazione dei muri rimanga vivo, serve solo per creare i processi figli ma, una volta terminato il compito, può tranquillamente 'morire' rilasciando risorse.
Altro dettaglio su genera, perché passi la variabile 'parte' se è globale? A mio avviso puoi ovviare il passaggio del parametro.
Quindi arriviamo al problema della parte '0' saltata. In questo caso io toglierei proprio l'incremento dal loop del processo principale e lo metterei direttamente in genera, come ultima istruzione da eseguire quando i muri sono stati 'generati'. Così facendo viene gestito anche lo 0, ovviamente ci vuole un controllo quando sono terminate tutte le possibili 'parti' da generare altrimenti la variabile comincerà ad incrementare continuamente senza ottenere nulla (si potrebbe forzare nuovamente a 0 'parte' quando sono è maggiore o uguale a 6, in questo modo il tutto diventerebbe un livello infinito che ciclicamente ripete il posizionamento dei muri).
Code: Select all
//Nel processo 'principale' modifica la riga dell'if nel seguente modo
if (walls<5) genera(); end
//Il processo 'genera' cambialo in una funzione nel seguente modo
function genera()
//Elimina tutte le assegnazioni della variabile 'parte' in quanto non servono.
//Elimina le istruzioni Loop, Frame e End in quanto non è un processo che
//deve rimanere vivo
//Come ultima istruzione della funzione aggiungi
parte=parte+1;
//In questo modo alla successiva chiamata della funzione 'parte' sarà già del valore corretto per generare i muri
//Se vuoi gestire una generazione 'infinita' di muri aggiungi dopo
//il case 5 il codice seguente
default:
parte=-1; //Setta -1 in modo che l'ultima istruzione, l'incremento di 1, metta a 0 la var
end
3) Per le collisioni non ho ancora visto come vengono gestite in Bennu e quindi non posso esserti d'aiuto.
Allego il sorgente modificato.