Avatar billede Slettet bruger
24. november 2006 - 23:29 Der er 7 kommentarer og
1 løsning

onEnterFrame på et movieclip fra en klasseinstans

Hej eksperter!

Jeg er ved at lave et lille spil, hvor man styrer et fly rundt på skærmen. Så skal der skydes fjender ned...

Jeg har en klasse der omfatter alle typer skud (kaldet PROJECTILE). Så opretter jeg enkelte skud ud fra den med forskellige egenskaber.

Og her er det gode: Det ser faktisk ud til, jeg ikke er stødt ind i nogen seriøse problemer (endnu)!

Men: Når der oprettes et skud, skal den klasseinstans så indsætte en instans at et movieclip som grafik i et andet movieclip (alle skud indsættes sandsynligvis i det samme).
Hvad gør jeg så, når jeg vil have dette nye movieclip til at udføre en funktion defineret i klassen, hvis instans lavede mc'et, på hver onEnterFrame?
Jeg kan vel ikke prøge onEnterFrame på klasseinstansen selv?
Men hvad så med movieclippet? Jeg har prøvet, men så udføres funktionen kun en gang...

Plz help me!
Avatar billede Slettet bruger
24. november 2006 - 23:31 #1
Ups, det blev relativt uforståeligt.
Altså:

Instans at PROJECTILE oprettes
Denne instans laver et MC
Dette MC skal på hver onEnterFrame udføre en funktion (der befinder sig i klasseinstansen der lavede MC'et)

Hvor skal jeg lægge onEnterFrame'n?
Avatar billede Slettet bruger
24. november 2006 - 23:32 #2
...og hvordan?
Avatar billede mat Nybegynder
25. november 2006 - 10:57 #3
var clip = some_timeline.attachMovie(params);
clip.onEnterFrame = function() {
yadayada
}

(men jeg tror jeg ville lave een onEnterFrame som et "game loop", der sørger for at opdatere de objekter der skal opdateres i hver frame).

mvh mat
Avatar billede Slettet bruger
25. november 2006 - 12:32 #4
Ja, men hvad hvis det er en specifik funktion?
var clip = some_timeline.attachMovie(params);
clip.onEnterFrame = myfunc();
}
?
Det virker ikke. Så gør den det kun 1 gang...
Avatar billede Slettet bruger
25. november 2006 - 12:36 #5
var clip = some_timeline.attachMovie(params);
clip.onEnterFrame = function() {
someclassinstance.somefunc();
}
så?
Avatar billede mat Nybegynder
25. november 2006 - 12:54 #6
Problemet er scope, når du laver eventhandlers til movieclips (og knapper) i en klasse. Scope ændres til clippet istedet for klassens. Du kan bruge Delegate til at få rette scope.

import mx.utils.Delegate;

class Test {
    private var _mc:MovieClip;
    public function Test(timeline:MovieClip) {
        _mc = timeline.attachMovie("linkage", "nc", 1, {_x:100, _y:100});
        _mc.onEnterFrame = Delegate.create(this, moveMc);
    }
   
    private function moveMc():Void {
        _mc._x += 5;
    }
}

Eller du kan lave et klamt hack med;

some_mc.scope = this;
some_mc.onEnterFrame = function() {
this.scope.outerObjectMethod();
}

mvh mat
Avatar billede Slettet bruger
25. november 2006 - 13:04 #7
Aah, ja, det er nok dit lille hack, der passer bedst i mit tilfælde...
Takker, bare smid et svar.
Avatar billede mat Nybegynder
25. november 2006 - 13:14 #8
aight
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
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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