Avatar billede heavybreezer Nybegynder
22. november 2008 - 19:21 Der er 8 kommentarer og
1 løsning

Movieclips skal kommunikere

Hej alle,

Hvis jeg på Scene1 har et movieclip liggende, som indeholder noget kode, som gerne skulle gøre noget ved et andet movieclip som også ligger på Scene1, hvordan gør jeg så det ? I AS3 :)
Avatar billede maqhem Nybegynder
22. november 2008 - 19:45 #1
Den fede løsning er at lave en klasse, hvor begge movieclips er en del af klassen. Så kan du kommunikere med begge to på samme tid. Så kan du lade dit movieclip dispatche en event, som din klasse lytter på, og så kan du få den til at snakke med det andet movieclip, når du ønsker det. Hvis du laver en constructor som denne, så er du garteret til enhver situation:

public static var EVENT_DISPATCH = "MCEvent_EventDispatch;
private var Data:*;
public function MCEvent(DataObject:*, Type:String, Bubles:Boolean = false, Cancelable:Boolean = false):void {
    super(Type, Bubles, Cancelable);
    Data = DataObject;
}
public function get EventData():Object {
    // her skal du så have noget med...
    return {Data1:Data.Info1, Data2:Data.Info2, Navn:Data.EtNavn /* etcetera */};
}

Dispatch med:

dispatchEvent(new MCEvent(MCEvent.EVENT_DISPATCH, {Info1:"hej", Info2:"...", EtNavn:"Erik"});

Og lyt med:

MC.addEventListener(MCEvent.EVENT_DISPATCH, HvadNu);

Der findes også den løsning at droppe klassen, der samler de to movieclips i én, og så bare laver din lytter og det på stage.
Avatar billede maqhem Nybegynder
22. november 2008 - 19:46 #2
Funktionen HvadNu kan så se sådan ud:

function HvadNu(e:MCEvent):void {
    trace(e.EventData.Navn); // Erik
}
Avatar billede heavybreezer Nybegynder
22. november 2008 - 20:28 #3
Jeg havde tænkt noget i retningen af, at hvis dette stod i mit Actionscript i frame 1 i mit ene movieclip som fx. hedder Objekt1:
function flytDen():void {
    Objekt2.x=10;
}

Hvis i kan følge mig ?
Avatar billede heavybreezer Nybegynder
22. november 2008 - 20:35 #4
Det kan man gøre normalt, hvis Objekt2 ligger inde i Objekt1, men da Objekt2 ligger på Scene1, giver det problemer. Hvad gør man ?
Avatar billede maqhem Nybegynder
22. november 2008 - 20:36 #5
Klart. Det er den nemme løsning:

root["Objekt2"].play();
Avatar billede heavybreezer Nybegynder
22. november 2008 - 20:54 #6
Det virker så kun, hvis begge Objekter ligger på Scene1?
Begge mine objekter ligger i et movieclip. For at gøre det nemmere bruger jeg de rigtige navne så.

Begge objekter ligger i et movieclip som har magic som instancename.
Første objekt hedder magic1 og er et movieclip. Andet objekt hedder blackfade og er også et movieclip.

I min første frame inde i movieclippet 'magic1', vil jeg gerne få det andet movieclip 'blackfade' til at afspilles.
Avatar billede maqhem Nybegynder
22. november 2008 - 21:04 #7
Okay, du får ét gæt... Hvis du gætter på følgende, har du gættet rigtigt:

root["magic"].blackfade.play();
Avatar billede heavybreezer Nybegynder
22. november 2008 - 22:02 #8
Tusind tak. Læg venligst et svar :)
Avatar billede maqhem Nybegynder
22. november 2008 - 22:15 #9
Svar.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester