06. februar 2008 - 21:32Der 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.
Der bliver investeret massivt i AI. Teknologien er mere tilgængelig end nogensinde, og ambitionerne er høje. Alligevel oplever mange virksomheder, at resultaterne udebliver.
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).
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å..
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.