webForumDet fria alternativet

Movieclips trigger events

Flash

1 svar · 457 visningar · startad av mollemus

Medlem sedan jan. 200833 inlägg
Frågan#1

Hej!

Jag undrar om det på något sätt går att göra så att movieclips kan känna av när någon tryckt på en specifik knapp. Detta utan att behöva använda onEnterFrame på alla movieclips, för det är väldigt processorkrävande.

Så om jag har 5 movieclips och en knapp så vill jag t.ex. att när jag trycker på knappen så ska alla 5 movieclips känna av att jag tryckt på den knappen och dölja sig själva. Jag får inte lösa det genom att själva knappen har en kod som döljer dem, för jag är aldrig säker på sökvägen till dessa movieclips.

Medlem sedan mars 20099 inlägg
#2

Detta är trivialt i AS3, men det låter ju som om du använder AS2.

Man använder sig av något som kallas "Observer pattern", som är precis vad eventsystemet i AS3 bygger på. Det objekt i koden som är intresserat av ett annat objekt säger "nu vill jag prenumerera på det som händer borta hos dig" och när något händer får det förstnämnda objektet veta det och kan göra vad det vill. I AS2 har du onRelease o.s.v. som är funktionspekare (d.v.s. en enda funktion), men i AS3 kan flera funktioner köras vid samma event, genom att flera "listeners" registreras på samma event.

Du kan alltså skriva en egen implementation utav detta. Det gör du genom att hålla referenser till alla funktioner som ska köras vid knappens onRelease i en array, och onRelase-funktionen på knappen loopar igenom denna array och kör alla funktionerna. När ett objekt (ett movieclip i ditt exempel) vill prenumerera på knappens onRelease-event lägger det till sig i ovan nämnda array.

Men det enklaste om det bara handlar om att dölja movieclips är antagligen att ha en array över de movieclips som ska döljas istället, och loopa igenom och dölja dessa i den enda onRelease-funktionen.

251 ms totalt · 4 externa anrop · v20260731065814-full.2f471f9e
120 ms — deklarationer (db)
0 ms — hämta statistik (cache)
128 ms — hämta tråd, inlägg och bilagor (db)
120 ms — ändringar (db)