Flash CS3 - Flash CS4

Free tutorials and scripts for all.
Actionscript 3.0

Sprite.hitArea una proprietà di Actionscript 3.0

This is a discussion on Sprite.hitArea una proprietà di Actionscript 3.0 within the Articoli e tutorials forums, part of the Flash CS3 e Actionscript 3.0 category; Mi ricordo che con Flash 8 capitava alle volte di dover creare un' area ' trasparente ' ( tipo Hotspot ) sui cui applicare ...


Go Back   Forum Flash CS3 Flash CS4 > Flash CS3 e Actionscript 3.0 > Articoli e tutorials

Register FAQ Members List Calendar Search Today's Posts Mark Forums Read
  #1 (permalink)  
Old 21-09-07, 08:27
Administrator
 
Join Date: Jul 2007
Location: Cesena
Posts: 4,486
Rep Power: 6
Flep is on a distinguished road
Sprite.hitArea una proprietà di Actionscript 3.0

Mi ricordo che con Flash 8 capitava alle volte di dover creare un' area ' trasparente ' ( tipo Hotspot ) sui cui applicare degli eventi del mouse per poi far eseguire un determinato codice.
Faccio un esempio, creavo una MovieClip, con un' area di dimensioni che mi servivano e colore completamente trasparente. Utilizzando poi il vecchio metodo hitTest, assegnavo delle azioni una volta che il mouse dell' utente andasse a collidere con questa stessa area.
Sicuramente sarebbe tuttora una tecnica ancora valida utilizzando il nuovo metodo hitTestObject come abbiamo visto nell' articolo: hitTest con Flash CS3, ma adesso Actionscript 3.0 ci mette a disposizione una nuova proprietà della classe Sprite ( utilizzabile anche con la classe MovieClip, dato che quest' ultima eredita dalla classe Sprite ) che si chiama hitArea.

Come al solito, mi creo un FLA che salvo con nome ' main.fla ' di misure 550x300, al cui interno:
- creo, chaimiamola così, l' area che fungerà da esca. Una MovieClip ( con centro di registrazione in alto al centro ) di forma rettangolare, colore completamente trasparente di misure 550x100. La chiamo hit_area_mc e la posiziono a y=10.
- creo un' altra MovieClip ( con centro di registrazione in basso al centro ) che conterrà un menu , quindi con delle voci di menu e uno sfondo rettangolare di misure 550x100. La chiamo menu_mc e la posiziono a y=10.
2 MovieClip

Creo la Document Class, un file AS che salvo con nome ' Main.as ', implementata in questo modo:
Code:
package
{
	import flash.display.MovieClip;
	import flash.display.Sprite;
	import flash.events.MouseEvent;
	import flash.events.Event;
	
	public class Main extends MovieClip
	{
		private var arriveY:int;
		
		public function Main()
		{
			init();
		}
		
		private function init():void
		{
			stage.frameRate=31;
			
			menu_mc.hitArea=hit_area_mc;
			hit_area_mc.mouseEnabled=false;

			menu_mc.addEventListener(MouseEvent.MOUSE_OVER,setOver);
			menu_mc.addEventListener(MouseEvent.MOUSE_OUT,setOut);
		}
		
		private function setOver(m:MouseEvent):void
		{
			arriveY=98;
			m.currentTarget.removeEventListener(Event.ENTER_FRAME,closeMenu);
			m.currentTarget.addEventListener(Event.ENTER_FRAME,openMenu);
		}
		private function setOut(m:MouseEvent):void
		{
			arriveY=10;
			m.currentTarget.removeEventListener(Event.ENTER_FRAME,openMenu);
			m.currentTarget.addEventListener(Event.ENTER_FRAME,closeMenu);
		}
		
		private function openMenu(e:Event):void
		{
			var dy:Number=arriveY-e.currentTarget.y;
			var ay:Number=dy*.2;
			e.currentTarget.y+=ay;
			if(Math.abs(dy)<=.2)
				e.currentTarget.removeEventListener(Event.ENTER_FRAME,openMenu);
		}
		private function closeMenu(e:Event):void
		{
			var dy:Number=arriveY-e.currentTarget.y;
			var ay:Number=dy*.2;
			e.currentTarget.y+=ay;
			if(Math.abs(dy)<=.2)
				e.currentTarget.removeEventListener(Event.ENTER_FRAME,closeMenu);
		}
	}
}
Il risultato è questo che vediamo: ( basta andare verso la scritta ' menu ' col mouse )










Analizziamo il codice:

Proprietà

una variabile numerica ( numero intero ) a cui assegnerò ilpunto di arrivo Y per applicare un effetto inerzia a menu_mc
private var arriveY:int;

Metodi
init();
imposto un valore al frame rate
stage.frameRate=31;
ecco come dichiarare la proprietà hitArea. Si assegna la MovieClip hit_area_mc alla proprietà hitArea di menu_mc
menu_mc.hitArea=hit_area_mc;
poi perchè funzioni correttamente, bisogna impostare la proprietà mouseEnabled della MovieClip hit_area_mc a false
hit_area_mc.mouseEnabled=false;
aggiungo i due listeners in ascolto del MOUSE_OVER e MOUSE_OUT su menu_mc che chiameranno i rispettivi metodi setOver e setOut
menu_mc.addEventListener(MouseEvent.MOUSE_OVER,set Over);
menu_mc.addEventListener(MouseEvent.MOUSE_OUT,setO ut);

setOver();
imposto la variabile arriveY a 98 ( quindi menu_mc si sposterà con effetto inerzia alla coordinata y 98, in questo modo apriamo il menu
arriveY=98;
rimuovo il listener in ascolto di ENTER_FRAME che chiama il metodo closeMenu ( che vedremo di seguito )
m.currentTarget.removeEventListener(Event.ENTER_FR AME,closeMenu);
aggiungo il listener in ascolto di ENTER_FRAME che chiama il metodo openMenu ( che vedremo di seguito )
m.currentTarget.addEventListener(Event.ENTER_FRAME ,openMenu);

setOut();
imposto la variabile arriveY a 10 ( quindi menu_mc si sposterà con effetto inerzia alla coordinata y 10, in questo modo chiudiamo il menu
arriveY=10;
rimuovo il listener in ascolto di ENTER_FRAME che chiama il metodo openMenu ( che vedremo di seguito )
m.currentTarget.removeEventListener(Event.ENTER_FR AME,openMenu);
aggiungo il listener in ascolto di ENTER_FRAME che chiama il metodo closeMenu ( che vedremo di seguito )
m.currentTarget.addEventListener(Event.ENTER_FRAME ,closeMenu);

openMenu();
applico l' inerzia al movimento sull' asse Y di menu_mc in base al valore di punto di arrivo della variabile arriveY ( lo apro)
var dy:Number=arriveY-e.currentTarget.y;
var ay:Number=dy*.2;
e.currentTarget.y+=ay;
if(Math.abs(dy)<=.2)
e.currentTarget.removeEventListener(Event.ENTER_FR AME,openMenu);

closeMenu();
applico l' inerzia al movimento sull' asse Y di menu_mc in base al valore di punto di arrivo della variabile arriveY ( lo chiudo )
var dy:Number=arriveY-e.currentTarget.y;
var ay:Number=dy*.2;
e.currentTarget.y+=ay;
if(Math.abs(dy)<=.2)
e.currentTarget.removeEventListener(Event.ENTER_FR AME,closeMenu);

Alla prossima !
__________________

 


I recommend: Essential Actionscript 3.0

- Non rispondo ai messaggi privati con domande tecniche. Apri una discussione sul forum !
- I do not reply technicians pvt messages. Open a thread !
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote

  #2 (permalink)  
Old 16-02-08, 17:53
Junior Member
 
Join Date: Jan 2008
Posts: 4
Rep Power: 0
mauretto78 is on a distinguished road
Re: Sprite.hitArea una proprietà di Actionscript 3.0

Ciao Flep
sono un nuovo utente e innanzi tutto complimenti per questo ottimo sito/forum.
Ho un problema sui tuoi tutorial, forse causato da inesperienza.....ogni volta che eseguo la prova del filmato mi da errore 1120 e non funziona niente.
Ho visto in giro che sembri sia qualcosa legato alla sintassi, ma non so se è giusto.
Potresti delucidarmi al riguardo, cosi riesco a concludere almeno uno dei tuoi preziosi tutorial.
Grazie
Ciao
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote

  #3 (permalink)  
Old 29-02-08, 06:55
Administrator
 
Join Date: Jul 2007
Location: Cesena
Posts: 4,486
Rep Power: 6
Flep is on a distinguished road
Re: Sprite.hitArea una proprietà di Actionscript 3.0

Ciao mauretto,
difficile da dirsi...

Cosa dice esattamente l' errore ?
__________________

 


I recommend: Essential Actionscript 3.0

- Non rispondo ai messaggi privati con domande tecniche. Apri una discussione sul forum !
- I do not reply technicians pvt messages. Open a thread !
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote

  #4 (permalink)  
Old 29-02-08, 07:07
Junior Member
 
Join Date: Jan 2008
Posts: 4
Rep Power: 0
mauretto78 is on a distinguished road
Re: Sprite.hitArea una proprietà di Actionscript 3.0

Ciao Flep,
l'errore che viene fuori è il 1120
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote

  #5 (permalink)  
Old 29-02-08, 07:30
Administrator
 
Join Date: Jul 2007
Location: Cesena
Posts: 4,486
Rep Power: 6
Flep is on a distinguished road
Re: Sprite.hitArea una proprietà di Actionscript 3.0

Hai una proprietà che ha valore undefined... difficile da dirsi su 2 piedi, bisognerebbe che ci fai vedere il codice spiegando quali modifiche ai attuato rispetto al tutorial.
__________________

 


I recommend: Essential Actionscript 3.0

- Non rispondo ai messaggi privati con domande tecniche. Apri una discussione sul forum !
- I do not reply technicians pvt messages. Open a thread !
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote

Flash Multi Gallery
  #6 (permalink)  
Old 18-03-08, 10:44
Junior Member
 
Join Date: Jan 2008
Posts: 4
Rep Power: 0
mauretto78 is on a distinguished road
Re: Sprite.hitArea una proprietà di Actionscript 3.0

scusa flep se non rispondo dopo tantissimo!
Alla fine ho risolto....avevo fatto confusione nel linkare i movie.
Thanks as well
alla prossima
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote

  #7 (permalink)  
Old 04-06-08, 19:29
Zolmandacuba's Avatar
Member
 
Join Date: Apr 2008
Posts: 60
Rep Power: 1
Zolmandacuba is on a distinguished road
Send a message via Skype™ to Zolmandacuba
Re: Sprite.hitArea una proprietà di Actionscript 3.0

Ciao ragazzi scusate la domanda ma ho un problema che mi fa impazzire:

ho una MovieClip con all'interno altre 2 movieclip.Questa movieclip scende verso lo stage una volta che è stato schiacciato un pulsante. Fin qui tutto ok.
è anche predisposta una funziona perchè ritorni su con il medesimo movimento

la movieclip in questione è una menu bar con dentro (movieclip nella movieclip) dei tasti animati.
Quello che vorrei fare è che rimanesse giu fin quando il mouse non esce dalla sua area, e mi trovo davanti al seguente problema:

io ho provato a richiamare la funzione che la butta su di nuovo attraverso il comando MOUSE_OUT dalla menu bar stessa.

funziona senonchè quando mi sposto tra i tasti della menubar, il MOUSE_OUT è continuamente attivato e disattivato, attivato e disattivato. Cioe la movieclip della menubar riconosce l'uscita da sè stessa appena clikko sui tasti, ma in realtà i tasti sono dentro la menubar stessa, perchè si attiva il MOUSE_OUT???

Grazie
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote

  #8 (permalink)  
Old 04-06-08, 19:37
Zolmandacuba's Avatar
Member
 
Join Date: Apr 2008
Posts: 60
Rep Power: 1
Zolmandacuba is on a distinguished road
Send a message via Skype™ to Zolmandacuba
Re: Sprite.hitArea una proprietà di Actionscript 3.0

ovviamente dopo dovrò anche vedermela col problema del fatto che il Mouse, prima di fare MOUSE_OUT, deve fare MOUSE_OVER.....no?

Mi spiego: la barra scende da fuori dello stage e non tocca il mouse per niente. come potrebbe il essere attivato un comando MOUSE_OUT se L"IN" non è ancora mai successo.......

sarà una cosa banale ma non ci salto mica fuori
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote

  #9 (permalink)  
Old 07-06-08, 06:42
Administrator
 
Join Date: Jul 2007
Location: Cesena
Posts: 4,486
Rep Power: 6
Flep is on a distinguished road
Re: Sprite.hitArea una proprietà di Actionscript 3.0

Quote:
Originally Posted by Zolmandacuba View Post
Ciao ragazzi scusate la domanda ma ho un problema che mi fa impazzire:

ho una MovieClip con all'interno altre 2 movieclip.Questa movieclip scende verso lo stage una volta che è stato schiacciato un pulsante. Fin qui tutto ok.
è anche predisposta una funziona perchè ritorni su con il medesimo movimento

la movieclip in questione è una menu bar con dentro (movieclip nella movieclip) dei tasti animati.
Quello che vorrei fare è che rimanesse giu fin quando il mouse non esce dalla sua area, e mi trovo davanti al seguente problema:

io ho provato a richiamare la funzione che la butta su di nuovo attraverso il comando MOUSE_OUT dalla menu bar stessa.

funziona senonchè quando mi sposto tra i tasti della menubar, il MOUSE_OUT è continuamente attivato e disattivato, attivato e disattivato. Cioe la movieclip della menubar riconosce l'uscita da sè stessa appena clikko sui tasti, ma in realtà i tasti sono dentro la menubar stessa, perchè si attiva il MOUSE_OUT???

Grazie
Ciao,
in questi casi ecco perchè si usano metodi come hitArea oppure hitTestObject.
Il tuo problema è che hai 2 eventi, uno per il contenitore e poi gli altri per i pulsanti dentro al contenitore che fanno contrasto.
__________________

 


I recommend: Essential Actionscript 3.0

- Non rispondo ai messaggi privati con domande tecniche. Apri una discussione sul forum !
- I do not reply technicians pvt messages. Open a thread !
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote

  #10 (permalink)  
Old 07-06-08, 07:15
Administrator
 
Join Date: Jul 2007
Location: Cesena
Posts: 4,486
Rep Power: 6
Flep is on a distinguished road
Re: Sprite.hitArea una proprietà di Actionscript 3.0

Quote:
Originally Posted by Zolmandacuba View Post
ovviamente dopo dovrò anche vedermela col problema del fatto che il Mouse, prima di fare MOUSE_OUT, deve fare MOUSE_OVER.....no?

Mi spiego: la barra scende da fuori dello stage e non tocca il mouse per niente. come potrebbe il essere attivato un comando MOUSE_OUT se L"IN" non è ancora mai successo.......

sarà una cosa banale ma non ci salto mica fuori
Allora in questo caso ti ho creato un esempio:
Attached Files
File Type: zip zolman.zip (44.1 KB, 18 views)

__________________

 


I recommend: Essential Actionscript 3.0

- Non rispondo ai messaggi privati con domande tecniche. Apri una discussione sul forum !
- I do not reply technicians pvt messages. Open a thread !
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote

Reply

Bookmarks

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is On
Trackbacks are On
Pingbacks are On
Refbacks are On
Forum Jump

Similar Threads

Thread Thread Starter Forum Replies Last Post
Object Oriented Programming - lezione 2 - le proprietà di una classe Actionscript 3.0 Flep Programmazione Orientata agli Oggetti - tutorials 6 16-05-08 17:06
dimensioni sprite acca2o Actionscript 3.0 base 1 19-03-08 09:47
metodi set e get x sprite obj boxbuilder Actionscript 3.0 base 6 21-01-08 10:43
Sprite.hitArea - property of Actionscript 3.0 Flep Tutorials 9 03-10-07 21:39
hitArea arbitrariamente complessa da bitmapdata??? giovapaglia Actionscript 3.0 avanzato 4 01-10-07 11:49


All times are GMT. The time now is 12:08.


Powered by vBulletin versione 3.7.4
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0 RC4
Forum SiteMap


FlepStudio
by Filippo Lughi
P.IVA 03605860406