[Pandora rebirth] Fall to win

Spazio dedicato al linguaggio BennuGD per programmare videogiochi sulle nostre openconsole
Avatar utente
Zip
Site Admin
Messaggi: 3098
Iscritto il: 3 mag 2011, 21:03
Console open: Attuali Caanoo , Wiz, dingoo a320 (possedute Wiz, s7100B, s5110, s7300B, OpenPandora)
Località: Sicilia
Contatta:

Re: [Pandora rebirth] Fall to win

Messaggioda Zip » 12 feb 2012, 17:03

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

Codice: Seleziona tutto

if (collision (type classe_muri)) break; end

valga come

Codice: Seleziona tutto

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..
Allegati
ftw0_012.zip
(1.68 KiB) Scaricato 128 volte

Avatar utente
gigios
Newser OC.it
Newser OC.it
Messaggi: 851
Iscritto il: 4 mag 2011, 9:08
Console open: Wiz; Caanoo
Località: Lombardia

Re: [Pandora rebirth] Fall to win

Messaggioda gigios » 13 feb 2012, 19:12

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:

Codice: Seleziona tutto

    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).

Codice: Seleziona tutto

//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.
Allegati
ftw0_012b.zip
(1.88 KiB) Scaricato 110 volte
Immagine

Avatar utente
gigios
Newser OC.it
Newser OC.it
Messaggi: 851
Iscritto il: 4 mag 2011, 9:08
Console open: Wiz; Caanoo
Località: Lombardia

Re: [Pandora rebirth] Fall to win

Messaggioda gigios » 13 feb 2012, 20:08

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:

Codice: Seleziona tutto

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.
Immagine

Avatar utente
Zip
Site Admin
Messaggi: 3098
Iscritto il: 3 mag 2011, 21:03
Console open: Attuali Caanoo , Wiz, dingoo a320 (possedute Wiz, s7100B, s5110, s7300B, OpenPandora)
Località: Sicilia
Contatta:

Re: [Pandora rebirth] Fall to win

Messaggioda Zip » 13 feb 2012, 20:16

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

Avatar utente
gigios
Newser OC.it
Newser OC.it
Messaggi: 851
Iscritto il: 4 mag 2011, 9:08
Console open: Wiz; Caanoo
Località: Lombardia

Re: [Pandora rebirth] Fall to win

Messaggioda gigios » 13 feb 2012, 20:20

Zip ha scritto: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: ).
Immagine

Avatar utente
Zip
Site Admin
Messaggi: 3098
Iscritto il: 3 mag 2011, 21:03
Console open: Attuali Caanoo , Wiz, dingoo a320 (possedute Wiz, s7100B, s5110, s7300B, OpenPandora)
Località: Sicilia
Contatta:

Re: [Pandora rebirth] Fall to win

Messaggioda Zip » 13 feb 2012, 21:23

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
Allegati
ftw0_014.zip
(33.79 KiB) Scaricato 114 volte

Avatar utente
Zip
Site Admin
Messaggi: 3098
Iscritto il: 3 mag 2011, 21:03
Console open: Attuali Caanoo , Wiz, dingoo a320 (possedute Wiz, s7100B, s5110, s7300B, OpenPandora)
Località: Sicilia
Contatta:

Re: [Pandora rebirth] Fall to win

Messaggioda Zip » 15 feb 2012, 19:37

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?

Avatar utente
gigios
Newser OC.it
Newser OC.it
Messaggi: 851
Iscritto il: 4 mag 2011, 9:08
Console open: Wiz; Caanoo
Località: Lombardia

Re: [Pandora rebirth] Fall to win

Messaggioda gigios » 15 feb 2012, 21:13

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.
Immagine

Avatar utente
Zip
Site Admin
Messaggi: 3098
Iscritto il: 3 mag 2011, 21:03
Console open: Attuali Caanoo , Wiz, dingoo a320 (possedute Wiz, s7100B, s5110, s7300B, OpenPandora)
Località: Sicilia
Contatta:

Re: [Pandora rebirth] Fall to win

Messaggioda Zip » 15 feb 2012, 23:02

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;)

Avatar utente
Zip
Site Admin
Messaggi: 3098
Iscritto il: 3 mag 2011, 21:03
Console open: Attuali Caanoo , Wiz, dingoo a320 (possedute Wiz, s7100B, s5110, s7300B, OpenPandora)
Località: Sicilia
Contatta:

Re: [Pandora rebirth] Fall to win

Messaggioda Zip » 17 feb 2012, 17:30

-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
Allegati
ftw0.019.zip
(30.81 KiB) Scaricato 116 volte


Torna a “BennuGD Italia”

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite