Flash: HitTest e punteggio

Di: alice33 | 26/09/2020 18:51:19
Ciao a tutti, sono una new entry ai primi approcci con Flash 8. Sto tentando di realizzare un semplice giochino per bambini ma ho qualche problema. Spero che abbiate voglia di rispondermi....
Ho un mc_proiettile comandato da tastiera, che va a colpire altri mc, diversi tra loro, che compaiono in successione; per attivare i punteggi ho inserito una casella di testo dinamico che funziona da variabile (coin)che a inizio gioco ha valore 0; poi ho associato all'evento hitTest dell'mc_proiettile con il primo degli altri mc il codice
if (this.hitTest(this._parent.mc)) {
_root.coin = _root.coin+1;}
In questo modo però l'incremento della variabile coin non è di 1, ma di diversi punti.... Credo che dipenda dal fatto che la collisione avviene in realtà più volte, a distanza di millesimi di secondo (è un'ipotesi....) Come posso fare?

Risposte



Basta inserire un'altra condizione prima di quella da te postata, es:
if (miavariabile==0){
if (this.hitTest(this._parent.mc)) {
_root.coin = _root.coin+1;
miavariabile=1;
}
}
in questo modo dovresti risolvere il problema, non ho testato lo script.

Di: goku | 26/09/2020 18:51:19


Grazie mille, Goku! Ho provato, ma purtroppo il risultato è lo stesso: invece di 1 solo punto me ne dà 3 oppure 4/5...
Inoltre mi pare di capire che, siccome gli mc da colpire sono tutti diversi e appaiono in successione, anche se lo script funzionasse dovrei aggiornare via via le possibili variabili, prevedendo che il punteggio potrebbe essere diverso a seconda dei colpi andati a segno.... Ad es. alla comparsa del terzo mc potrei già avere miavariabile==0, oppure miavariabile==1 o anche miavariabile==2...... Dato che gli mc sono una ventina e l'aumento delle possibilità è esponenziale, avrei una ripetizione che mi pare poco pratica.
Avevo pensato di fare in questo modo: elimino gli mc colpiti appena avviene la collisione, così il punto di contatto è solo in quel preciso istante, flash va avanti nella lettura del codice ed assegna il famoso punto. C'è uno script per farlo? (Ho letto che è possibile se gli mc sono creati con AS, ma non so come fare quando invece sono messi nella timeline manualmente)
Scusa la "niubbiaggine".....

Di: alice33 | 26/09/2020 18:51:19


Non vorrei dire una cavolata, ma credo che il problema sia altrove, se ad ogni collisione viene assegnato 3-5 punti invece di 1, significa che quel codice viene esguito 3-5 volte, dato che alla prima escuzione il primo if ne blocca le successive, questo non dovrebbe accadere.
Il discorso che fai sulla variabile da settare non è corretto.
Per quanto riguarda l'eliminazione del MC, dipende da come è creato, cmq potresti provare ad aggiungere un fotogramma vuoto nel MC a cui associerai il codice per l'incremento della variabile ed uno stop, così facendo quando avverrà la collisione la testina si sposterà su quest'ultimo e otterrai sia l'incremento della variabile che la scomparsa dello stesso MC.

Di: goku | 26/09/2020 18:52:19


Non credo che tu dica cavolate, è molto più probabile che le dica (e le faccia) io.... ma non ho capito la questione della variabile. Perchè il discorso sul settaggio non è corretto, potresti spiegarmelo? Ho tutto da imparare.
Se confronto miavariabile e da 0 la porto a 1 alla prima collisione (con il primo mc), nella seconda collisione (con il secondo mc) miavariabile sarà rimasta a 1..... perciò usando lo stesso codice l'if della seconda collisione non verrà eseguito...... o no?
Per quanto riguarda l'assegnazione di 3/5 punti ad ogni collisione: in effetti usando trace me ne rileva più di una. Proverò a rifare il tutto...
Grazie per i consigli

Di: alice33 | 26/09/2020 18:52:19


Scusami avevo capito male io, cmq il problema è facilmente risolvibile, basta risettare la variabile a 0, puoi farlo ad ogni lancio di un nuovo proiettile dopo l'assegnazione del punteggio o in altro modo.
Il mio suggerimento doveva servirti per permettere l'incremento della variabile di un solo punto per volta e a quanto pare non è servito.

Di: goku | 26/09/2020 18:53:19


Grazie Goku, in effetti la soluzione di ri-settare la variabile a 0 dopo l'aggiornamento del punteggio è un'ottima idea! Però ho risolto il problema dell'incremento multiplo: dipendeva dall'mc_proiettile che era movimentato tramite codice: eliminandolo dopo la collisione il punteggio è come dev'essere
Ho altre domandine, sicuramente molto stupide, ma sono una principiante..... abbiate pazienza. Apro un altro filo.

Di: alice33 | 26/09/2020 18:53:19