Avatar billede kbirk Nybegynder
06. februar 2008 - 21:32 Der er 4 kommentarer og
1 løsning

Simpelt spørgsmål til AS3 (CS3)

Hej
Jeg er lige begyndt at kigge på flash, for første gang. Jeg har lavet mig et lille testscript som jeg har et spørgsmål til. Scriptet kan ses nederst.

Jeg har lavet en timer som tegner en cirkel(myMovie) på curseren position, det virker fint nok. Men alle de steder cirklen tegnes forbliver den.

Så spørgsmålet er, hvad skal jeg gøre for at der kun vises en cirkel på curser pos, som forsvinder når man flytter musen.

Håber det er forståeligt.

[code]
Mouse.hide();

var oneSecondTimer:Timer = new Timer(0);

var myMovie:MySymbol = new MySymbol();

oneSecondTimer.addEventListener(TimerEvent.TIMER,setBall);
oneSecondTimer.start();

function setBall(event:TimerEvent):void{
    var xVar = this.mouseX;
    var yVar = this.mouseY;
    addChild(myMovie);
    myMovie.x = xVar;
    myMovie.y = yVar;
    trace(root);
}

[/code]
Avatar billede kbirk Nybegynder
06. februar 2008 - 21:33 #1
hmm.. btw hvad er tag for kode?
Avatar billede kbirk Nybegynder
06. februar 2008 - 22:26 #2
Avatar billede maqhem Nybegynder
07. februar 2008 - 08:27 #3
For det første behøver du ikke at nævne, at du koder i Flash CS3, da du kun kan skrive ActionScript 3 i denne version. For det andet, så prøv at lave din kode så simpel og smart som overhovedet muligt. Din kode er for kompleks til at give mening - og dette er ingen kritik af din kode, men nærmere for at fortælle dig, at Flash kan gøre sådan noget meget smartere.

For det første skal du ikke bruge en timer til at opdatere musens position. Du ikke bare bør, men skal benytte én af følgende events:

Event.ENTER_FRAME
MouseEvent.MOUSE_MOVE

Når du bruger en timer, udnytter du ikke Flash' indbyggede framerate på nogen måde. Og når du brnytter addChild for at lave en ny cirkle hver eneste gang, din TimerEvent kaldes, laver du til sidst så mange cirkler, at Flash vil begynde at hakke.

Så kort...:
1. Du må KUN bruge et interval til at opdatere noget i din film, hvis du ligefrem ønsker en forsinkelse. Brug ellers Event.ENTER_FRAME eller anden indbygget event.
2. Du må IKKE bruge addChild, hvis du kun skal opdatere en instans. addChild sætter en ny instans på din scene.
3. Det er spild først at sætte xVar og yVar, når du bare kan sætte x og y med det samme til mouseX og mouseY.
4. Man tracer bare ikke sin root. Det giver ikke nogen mening.
5. Du bør fasttype dine variabler - eksempelvis "var xVar:Number = (...)"

Hér er en lidt bedre kode:

import flash.events.MouseEvent;

Mouse.hide();

// Lav ny cursor...
var myMovie:MySymbol = new MySymbol();
// ... og tilføj én enstans på scenen
addChild(myMovie);

// Lyt efter, når cursoren flytter sig på scenen (stage)
stage.addEventListener(MouseEvent.MOUSE_MOVE, setBall);

function setBall(E:Event):void {
    // Opdater myMovie's position
    myMovie.x = mouseX;
    myMovie.y = mouseY;
}

Men ellers er din idé faktisk god nok. Du skal bare lære hvad de forskellige metoder (så som addChild) gør, og så skal du lære at benytte de rigtige metoder på de rigtige tidspunkter (eksempelvis med TimerEvent).

Held og lykke med dit projekt.
Avatar billede kbirk Nybegynder
07. februar 2008 - 12:06 #4
Tusind tak for det.. Jeg kan godt se hvad du skriver nu, og det giver meget mening. Jeg skal bare lige omstille mig til den her måde at programmere på..

Du kan bare smide et svar så giver jeg point.
Avatar billede maqhem Nybegynder
07. februar 2008 - 12:17 #5
Okay.
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