+ Reply to Thread
Results 1 to 4 of 4

HitTest con Flash CS3

This is a discussion on HitTest con Flash CS3 within the Articoli e tutorials forums, part of the Flash Italiano category; Il caro buon vecchio metodo hitTest ? E' stato rimosso, o per meglio dire è stato diviso in 2 separati ...

  1. #1
    Administrator Living At The FlepStudio! Flep is on a distinguished road
    Join Date
    Jul 2007
    Posts
    5,762
    Rep Power
    11

    HitTest con Flash CS3

    Il caro buon vecchio metodo hitTest ? E' stato rimosso, o per meglio dire è stato diviso in 2 separati metodi che si chiamano HitTestObject e hitTestPoint.
    L' utilizzo di questi metodi non è molto diverso dal vecchio hitTest.

    Vediamo come funzionano...

    La Document Class che ho creato è questa:
    Code:
    package
    {
    	import flash.display.MovieClip;
    	import flash.events.Event;
    	import flash.events.MouseEvent;
    	import flash.text.TextField;
    	
    	public class ProvaNuovoHitTest extends MovieClip
    	{
    		public function ProvaNuovoHitTest()
    		{
    			primoCaso();
    			secondoCaso();
    		}
    		
    		private function primoCaso():void
    		{
    			black_mc.addEventListener(Event.ENTER_FRAME,controllaMouse);
    		}
    		
    		private function controllaMouse(e:Event):void
    		{
    			if(black_mc.hitTestPoint(mouseX,mouseY,true))
    				debug_0_txt.text='si';
    			else
    				debug_0_txt.text='no';
    		}
    		
    		private function secondoCaso():void
    		{
    			circle_1_mc.buttonMode=true;
    			circle_1_mc.addEventListener(MouseEvent.MOUSE_DOWN,sposta);
    			circle_1_mc.addEventListener(MouseEvent.MOUSE_UP,ferma);
    		}
    		
    		private function sposta(m:MouseEvent):void
    		{
    			circle_1_mc.startDrag(true);
    			circle_1_mc.addEventListener(Event.ENTER_FRAME,controllaContatto);
    		}
    		
    		private function controllaContatto(e:Event):void
    		{
    			if(circle_1_mc.hitTestObject(circle_0_mc))
    				debug_1_txt.text='si';
    			else
    				debug_1_txt.text='no';
    		}
    		
    		private function ferma(m:MouseEvent):void
    		{
    			circle_1_mc.stopDrag();
    			circle_1_mc.removeEventListener(Event.ENTER_FRAME,controllaContatto);
    		}
    	}
    }
    Risultato:










    Analizziamo il codice:

    nel primoCaso ( metodo ) lo script controlla sotto evento ENTER_FRAME se la clip collide con il mouse.
    In questo caso utilizzo il metodo hitTestPoint che ' vuole ' 3 parametri:
    -x del punto
    -y del punto
    -forma: è un valore boolean ( true/false ) con il quale si può decidere se applicare hitTestPoint solo alla reale sagoma della forma dell' oggetto oppure al suo bounding box.
    Invito a provare di cambiare quel valore per poter capire meglio se qualcuno avesse dei dubbi :)


    Nel secondoCaso ( metodo ) controllo se la MovieClip rossa ( che è trascinabile ) collide con quella blu utilizzando il metodo hitTestObject che vuole un solo parametro ( appunto l' oggetto di cui si vuole verificare la collisione ).
    Con il metodo hitTestObject non è possibile scegliere se appilcarlo alla reale forma oppure albounding box. Per fare ciò ci sono altre maniere e richiedono un livello molto avanzato di Actionscript e di trigonometria ( lo vedremo più avanti ).


    Alla prossima !

  2. #2
    Junior Member Settled In CrowSix is on a distinguished road
    Join Date
    Apr 2008
    Posts
    9
    Rep Power
    0

    Re: HitTest con Flash CS3

    Salve a tutti. Mi ricollego a questo topic per un piccolo problema riguardo la funzione hitTest.
    Sto provando a realizzare un semplice platform game e utilizzo dunque la funzione hitTest per controllare quando il mio personaggio tocca o meno il terreno.
    Ho dunque inserito nel mio livello un movieclip chiamato Omino e un movieclip chiamato Terreno.
    Con la funzione:
    Code:
     Omino.hitTestObject(Terreno)
    riesco a vedere effettivamente se il mio omino tocca il terreno.

    Il problema sorge però se voglio modificare il terreno e renderlo da piatto (ho usato inizialmente un semplice rettangolo) a qualcosa di più complesso (ad esempio una sporgenza o una buca). In questo caso hitTest funziona, ma restituisce true se l'oggetto Omino ha la X uguale alla sporgenza più alta del Terreno. In pratica, viene restituito true se l'oggetto Omino entra in contatto con l'oggetto Terreno, indipendentemente dalla sua forma, ma solo dalla sua 'altezza' massima.
    (Nell'allegato trovate un esempio di omino su buca: come si può vedere, viene considerata l'altezza del Terreno e non l'effettiva forma)
    Come è possibile rimediare?
    Attached Images

  3. #3
    Administrator Living At The FlepStudio! Flep is on a distinguished road
    Join Date
    Jul 2007
    Posts
    5,762
    Rep Power
    11

    Re: HitTest con Flash CS3

    Ciao
    Per collisioni avanzate, il mio consiglio è di usare altri metodi, tipo Pitagora e la trigonometria.

    Trovi alcuni esempi :

    Rotazione di coordinate e collisioni in superfici angolate con Flash CS3

    http://www.flepstudio.org/tutorials/...071206224.html

    Collisioni con Actionscript 3.0 - esempio 1

  4. #4
    Junior Member Settled In CrowSix is on a distinguished road
    Join Date
    Apr 2008
    Posts
    9
    Rep Power
    0

    Re: HitTest con Flash CS3

    Grazie mille. Appena ho un po' di tempo mi studio questi tutorial :D

+ Reply to Thread

LinkBacks (?)


Similar Threads

  1. Scroller di Eventi con hitTest
    By Vahn84 in forum Actionscript 3.0 base
    Replies: 4
    Last Post: 23-01-10, 09:13
  2. hittest and magnifying glass
    By flashkid101 in forum Flash English
    Replies: 2
    Last Post: 06-10-09, 04:53
  3. New HitTest method of Actionscript 3.0
    By Flep in forum Tutorials
    Replies: 5
    Last Post: 25-08-09, 15:13
  4. domanda su hittest
    By obhund in forum Flash Italiano
    Replies: 0
    Last Post: 12-02-09, 17:34
  5. piccolo problema con hitTest
    By skywalter in forum Flash Italiano
    Replies: 2
    Last Post: 11-08-08, 17:31

Tags for this Thread

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts