Forum Flash, Actionscript, PHP e MySQL
Hit Test "intelligente" (CS 4, AS 2.0)

 
Nuovo Topic   Rispondi    Forum Flash, Actionscript, PHP e MySQL » ActionScript & Server Side
Precedente  Successivo 
Autore Messaggio
LeeFX
principiante
principiante



Registrato: 18/10/09 08:32
Messaggi: 35

MessaggioOggetto: Hit Test "intelligente" (CS 4, AS 2.0)
Inviato: 22.02.10 | 23:23
Rispondi citando

Salve,
sto cercando un modo per fare un hit test "intelligente".
Mi spiego:

http://www.swfcabin.com/open/1266870676

Usando la funzione hitTest () e trascinando il cerchio, il triangolo o la stella sul quadrato "HIT ME", posso solo sapere se il quadrato è stato colpito da qualcosa ( hitTest ritorna true o false), ma non da cosa.

A me serve una funzione che mi dica non solo se sono stato toccato, ma anche da cosa.
Come posso fare?




NOTA:
Lo so che nell'esempio specifico, potrei lavorare direttamente sul cerchio, stella o triangolo, in modo che, anzichè fare uscire l' "OK!!" mi faccia uscire il suo nome.

Ma questo è solo un esempio. A me serve qualcosa di più generico, perchè lavoro su un gioco in cui una serie di oggetti possono collidere tra loro, e non so a prescindere chi toccherà cosa.

L'ideale inoltre sarebbe avere un array con tutti gli oggetti in cui entro in collisione in un dato momento, ammesso che ce ne sia più di uno.
Torna in cima
Profilo Messaggio privato  
Sponsor
Coach
amministratore
amministratore


Età: -1981
Registrato: 31/01/03 13:50
Messaggi: 4546
Località: Verona

MessaggioOggetto:
Inviato: 24.02.10 | 15:55
Rispondi citando

Ciao LeeFX,
potresti postare del codice commentato, o il sorgente, tanto per vedere cosa stai facendo?

____________________________________________________________


Il Forum è uno strumento di condivisione, oltre a fare DOMANDE, si possono anche dare RISPOSTE!
Torna in cima
Profilo Messaggio privato [ Nascosto ] HomePage Yahoo Messenger MSN Messenger Skype
LeeFX
principiante
principiante



Registrato: 18/10/09 08:32
Messaggi: 35

MessaggioOggetto:
Inviato: 02.03.10 | 19:48
Rispondi citando

Link dell'SWF:
http://www.swfcabin.com/open/1266870676

Semplicemente:

 
Codice:
//"circle_mc" è il cerchio verde, trascinabile col mouse.
circle_mc.onPress = function() {
    this.startDrag();
};

//una volta rilasciato, controlla se tocca "hitMe_mc" (il quadrato rosso al centro)
circle_mc.onRelease = function() {
    this.stopDrag();
    
    // se il quadrato rosso viene colpito
    if (this.hitTest(hitMe_mc)) {
        _root.hitMe_mc.hitMe_txt._visible = false; // cambia solo il testo da "HIT ME"...
    _root.hitMe_mc.ok_txt._visible = true; //... a "OK!!"
    } 
    else {
        _root.hitMe_mc.ok_txt._visible = false; // o viceversa se non è colpito
        _root.hitMe_mc.hitMe_txt._visible = true; 
        
    }
};


Il codice è ripetuto anche per la stella e il triangolo, ma questo è solo in questo esempio.

NOTA: nell'esempio l'hitTest è fatto una volta rilasciata una forma.
Nel mio caso però, le forme "vanno in giro da solo" per lo schermo, e devo fare un hitTest ad ogni frame.




Per risolvere il problema,
per ora mi sto arrangiando con un sistema di "hitPoint" e "shape" (forma) toccabili tra di loro.

Ogni hitPoint è un movieclip vuoto, figlio del movieclip shape,
e serve per delimitare i "punti sensibili" della forma.
Cosicchè, ad esempio, la shape del triangolo è circondata da un hitPoint per ogni angolo.

È un sistema necessario, perchè le coordinate x/y dei singoli hitPoint permettono di fare un test sulla sagoma effettiva delle altre forme, e non grossolanamente sul loro bounding box (vedi funzionamento di hitTest());

Da qui,
ogni forma ha un enterFrame per verificare, ad ogni ciclo, se tocca uno degli hitPoint di tutte le altre.

Una volta toccato un hitPoint, determino chi tocca chi, tramite
shape._name
e
hitPoint._parent._name

...

Bene,
questo mi risolve il problema iniziale (sapere chi tocca cosa)... peccato che sia troppo dispendioso.

Perchè all'aumentare delle forme in gioco, aumentano esponenzialmente gli hitPoint, e non solo ogni forma deve fare, ad ogni frame, un controllo su tutti gli hitPoint, ma i singoli hitPoint stessi hanno un enterFrame per aggiornare le loro coordinate, e convertirle da locali a globali (vedi localToGlobal());

Trattandosi di un gioco con delle routine relativamente pesanti, come il pathfinding e un po' di IA, non è un lusso che posso permettermi...
Speravo allora di ottimizzare con un sistema di Listening, ma non c'ho mai capito molto sull'argomento Very Happy

P.S.: Scusa se rispondo dopo quasi un mese, non mi sono arrivate le notifiche di risposta.
Torna in cima
Profilo Messaggio privato  
Mostra prima i messaggi di:   
Nuovo Topic   Rispondi    Forum Flash, Actionscript, PHP e MySQL » ActionScript & Server Side Tutti i fusi orari sono GMT + 2 ore
Pagina 1 di 1

Discussioni Simili
Topic Autore Forum Risposte Ultimo Messaggio
Nessun nuovo messaggio "Bowling for Columbine" e &... andbia Cinema, TV & Co. 1 25.09.04 | 22:02 Leggi gli ultimi messaggi
Coach
Nessun nuovo messaggio problema con hspace + vspace + valign... mino HTML, XHTML, CSS, standard W3C e accessibilità 4 28.09.06 | 18:43 Leggi gli ultimi messaggi
mino
Nessun nuovo messaggio "Live at Benaroya Hall" l'u... morgan Musica 1 22.08.04 | 12:53 Leggi gli ultimi messaggi
fish
Nessun nuovo messaggio Esistono altre strade oltre al "... mesk8 Flash Generale 2 25.11.05 | 12:02 Leggi gli ultimi messaggi
blitz
Nessun nuovo messaggio domanda da profano. sbloccare "i... suns iPhone 3 21.08.08 | 13:33 Leggi gli ultimi messaggi
Coach



 
Vai a:  
Non puoi inserire nuovi Topic in questo forum
Non puoi rispondere ai Topic in questo forum
Non puoi modificare i tuoi messaggi in questo forum
Non puoi cancellare i tuoi messaggi in questo forum
Non puoi votare nei sondaggi in questo forum
Non puoi allegare files in questo forum
Puoi downloadare gli allegati in questo forum



Powered by phpBB © 2001, 2002 phpBB Group - phpBB SEO Designed by coachdesign - © 2003-2005