[Pandora rebirth] Fall to win

Spazio dedicato al linguaggio BennuGD per programmare videogiochi sulle nostre openconsole
User avatar
Zip
Site Admin
Posts: 3101
Joined: 3 May 2011, 21:03
Console open: Attuali Caanoo , Wiz, dingoo a320 (possedute Wiz, s7100B, s5110, s7300B, OpenPandora)
Location: Sicilia
Contact:

Re: [Pandora rebirth] Fall to win

Post by Zip »

aggiornamento 0.012
1)problema vite, ho fatto come in bombjhon, solo che continua a essere scomoda questa soluzione, dovrei far si che i muri si blocchino..

2)problema ondate, sembra che io abbia risolto :D (spero :? )
ho tolto "parte=parte+1" da dentro il loop di genera() e l'ho messo dentro principale() prima di richiamere genera stesso,
adesso l'unico inconveniente è che salta la parte 0..
(se non da fastidio potremmo fregarcene.. la parte0 la usiamo solo come base per il conteggio..)
consigli?

3) vorrei fare in modo che legno() muro() fuoco() siano in una spece di "classe" in modo che se io dico

Code: Select all

if (collision (type classe_muri)) break; end
valga come

Code: Select all

if (collision (type muro)) break; end
if (collision (type legno)) break; end
if (collision (type fuoo)) break; end
ma questo secondo me è solo un accorgimento stilistico..
Attachments
ftw0_012.zip
(1.68 KiB) Downloaded 382 times
User avatar
gigios
Newser OC.it
Newser OC.it
Posts: 851
Joined: 4 May 2011, 9:08
Console open: Wiz; Caanoo
Location: Lombardia

Re: [Pandora rebirth] Fall to win

Post by gigios »

Avendo poco tempo da poter dedicare allo sviluppo con bennu, non posso darti suggerimenti ottimi :P

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.
Attachments
ftw0_012b.zip
(1.88 KiB) Downloaded 368 times
Image
User avatar
gigios
Newser OC.it
Newser OC.it
Posts: 851
Joined: 4 May 2011, 9:08
Console open: Wiz; Caanoo
Location: Lombardia

Re: [Pandora rebirth] Fall to win

Post by gigios »

Per il tuo terzo quesito ho visto che è necessario, nell'istruzione Collision, specificare il tipo di processo da 'controllare'.
Questo significa che per cambiare la tua gestione ed avere un unica istruzione Collision che gestisca tutte le tipologie di muri, sei costretto ad avere un unico processo muro al cui interno, eventualmente, utilizzare una grafica differente in base ad un parametro che puoi passare al processo stesso, nello stesso modo con cui passi le coordinate.

Esempio:

Code: Select all

process muro(tipoMuro, x,y)
begin
    if (tipoMuro==0)
        //Muro normale
        graph=2;
    elseif (tipoMuro==1)
        //Muro di legno
        graph=3;
    elseif (tipoMuro==2)
        //Muro di fuoco
        graph=4;
    end
    
    walls=walls+1;
    loop 
        y=y-2;                                       //SAli!
        if(y<1) walls=walls-1; break; end           //se superi il bordo superiore muori
        frame;
    end
end
Ovviamente così facendo dovresti modificare la generazione dei muri.
Image
User avatar
Zip
Site Admin
Posts: 3101
Joined: 3 May 2011, 21:03
Console open: Attuali Caanoo , Wiz, dingoo a320 (possedute Wiz, s7100B, s5110, s7300B, OpenPandora)
Location: Sicilia
Contact:

Re: [Pandora rebirth] Fall to win

Post by Zip »

come sempre un occhio esterno (e soprattuto piu esperto) capisce gli errori avvolte banali nella quale incappo..

per quanto riguarda il 3o quesito, inizialmente avevo fatto il muro come unico processo suddiviso in tipi(come hai ridimostrato tu), ma non ricordo per quale motivo avevo poi diviso i 3 muri.. ad ogni modo questa divisione mi tornera utile quando dovro aggiungere altre collisioni tipo acqua fuoco ecc..
per non mettere troppe condizioni e controcondizioni.. e gestire modifiche piu veloci (a mio parere)

sono riuscito a fare 1 logo animato,
aggiungo le tue modifiche, appena c'e l'abbozzo di menu posto la nuova versione ;)
grazie gigios
User avatar
gigios
Newser OC.it
Newser OC.it
Posts: 851
Joined: 4 May 2011, 9:08
Console open: Wiz; Caanoo
Location: Lombardia

Re: [Pandora rebirth] Fall to win

Post by gigios »

Zip wrote:grazie gigios
Avessi più tempo potrei anche essere più 'partecipe' nell'aiutarti ma purtroppo il tempo è tiranno e a casa ho altro da fare (piccole pesti incombono :twisted: ).
Image
User avatar
Zip
Site Admin
Posts: 3101
Joined: 3 May 2011, 21:03
Console open: Attuali Caanoo , Wiz, dingoo a320 (possedute Wiz, s7100B, s5110, s7300B, OpenPandora)
Location: Sicilia
Contact:

Re: [Pandora rebirth] Fall to win

Post by Zip »

ecco la 0.014
la 0.013 aggiunge il menu e il logo e altri fix
la 0.014 implementa in piu le correzioni di gigios (0.012b)
:D
che ne pensate dell effetto del logo? sembra troppo simile a epic free fall? :?
edit: la mia intensione è quella di rilasciare almeno 2 versioni al giorno..
il tempo adesso mi inizia a sembrare poco, credevo di potere essere piu tranquillo prima
Attachments
ftw0_014.zip
(33.79 KiB) Downloaded 368 times
User avatar
Zip
Site Admin
Posts: 3101
Joined: 3 May 2011, 21:03
Console open: Attuali Caanoo , Wiz, dingoo a320 (possedute Wiz, s7100B, s5110, s7300B, OpenPandora)
Location: Sicilia
Contact:

Re: [Pandora rebirth] Fall to win

Post by Zip »

ecco la 0.015, 0.016
0.017 (nuova animazione collisione legno)
e la alpha della 0.018 (introdotto score)
il problema di quest ultima è la collisione con il fuoco che se c'e la variabile spento=0 dovrebbe scalare 1 vita come la collisione col muro.. manon si sa perche si cicla -.-
edit: ma la differenza fra dichiararlo (genera)funzione o processo qual'e?
User avatar
gigios
Newser OC.it
Newser OC.it
Posts: 851
Joined: 4 May 2011, 9:08
Console open: Wiz; Caanoo
Location: Lombardia

Re: [Pandora rebirth] Fall to win

Post by gigios »

La differenza tra funzione e processo è abbastanza importante.
La funzione è praticamente un metodo che viene chiamato in un altro processo ed esegue una sola funzione (nel senso che non è un processo che deve aggiornarsi autonomamente ad ogni frame).
Al contrario un processo va visto come un mini programmino sempre in esecuzione fino a quando non termina autonomamente o viene 'killato' da qualche altro processo.
Praticamente le funzioni vanno usate per eseguire calcoli, operazioni 'singole', etc. I processi vanno utilizzati per tutte quelle 'entità' che devono rimanere 'vive' per più frame come ad esempio i nemici, i proiettili, esplosioni, etc.

Non sono sicuro d'essere stato 'capito' :P.

Sicuramente c'è una spiegazione più 'tecnica' da poter dare
Funzione su Wikipedia
Processo su Wikipedia (anche se x Bennu non è proprio questo il significato ma si avvicina molto, anche se per avere la certezza dovrei conoscere il comportamento interno del runtime).

Tornando al tuo metodo 'genera' (non ho guardato l'ultima versione) era definito come processo ed inoltre al suo interno aveva un loop. Questo significa che ogni volta che chiamavi, nel loop principale, 'genera' veniva creato un nuovo processo che rimaneva vivo (occupava memoria e cicli cpu) sino al termine dell'applicazione.
Ogni volta che chiamavi 'genera' creavi una nuova 'istanza' di questo processo, ovvero alla fine potevi trovarti con centinaia di processi 'genera' in memoria che non facevano nulla se non consumare cicli CPU con dei loop inutili.
Convertendola in funzione, e togliendo il loop, sostanzialmente la funzione viene utilizzata per generare l'elenco di muri da visualizzare e, completato il compito, la funzione esce tornando al processo 'chiamante' in modo che possa continuare il suo ciclo.
Image
User avatar
Zip
Site Admin
Posts: 3101
Joined: 3 May 2011, 21:03
Console open: Attuali Caanoo , Wiz, dingoo a320 (possedute Wiz, s7100B, s5110, s7300B, OpenPandora)
Location: Sicilia
Contact:

Re: [Pandora rebirth] Fall to win

Post by Zip »

gigios gia la tua è abbastanza tecnica come spiegazione per le mie scarse competeze :D
grazie per la delucidazione in ogni caso :)
ah fatemi sapere che ne pensate delle nuove animazioni;)
User avatar
Zip
Site Admin
Posts: 3101
Joined: 3 May 2011, 21:03
Console open: Attuali Caanoo , Wiz, dingoo a320 (possedute Wiz, s7100B, s5110, s7300B, OpenPandora)
Location: Sicilia
Contact:

Re: [Pandora rebirth] Fall to win

Post by Zip »

-aggiunte collisioni con fuoco con condizione: fuoco spento o cacceso
-aggiunta collisione con legno appallottolato o meno
-aggiunto 3o potere ghiaccio che verra usato per ghiacciare i muri di cemento e romperli appallottolati (se fosse stata una poesia e non un gioco avrei definito licenza poetica :lol: )

ora:
mi servono delle idee per nuovi muri nemici, o nemici veri e propri,
ho il potere fuoco che non serve a nulla per ora (quello ghiaccio gia so come collocarlo)

avevo pensato di fare delle barre tipo raggi laser a intermittenza dove bisogna cogliere il momento giusto per passarli

oppure?
idee per qualche nemico?
grazie..



(ho provato a compilare in exe per fare provare il gioco a chi non ha il bennupack, ma non ci sono riuscito..)
serve il nuovo gfx.fpg in questa versione è incluso nel archivio zippato

edit: scoperto 1 bug.. non riesco a fare "spawnare" 2 legni alla stessa y con x diverse...
(uno a dx e 1 a sx)
secondo me c'e qualcosa del codiche che ho aggiunto per fare girare i legni, chhe va in conflitto

Riedit: la scoperta è peggiorata non spawna completamente i legni di sinistra
Attachments
ftw0.019.zip
(30.81 KiB) Downloaded 370 times
Post Reply