Avatar billede satyriasis Nybegynder
08. juni 2008 - 18:16 Der er 4 kommentarer og
1 løsning

Hoppende bold menu, AS3

Er der en der kan hjælpe mig med at lave en menu med hoppende bolde, ligesom den her, bare i AS3 http://www.flashden.net/item/bouncing-ball-menu/208

Jeg kan sagtens få den lavet så boldene hopper en gang, men kan ikke finde ud af hvordan man skal gøre hvis man vil have dem til at fortsætte med at hoppe så længe man har musen over dem, og så spille animationen færdig, når man tager musen væk igen.
Avatar billede maqhem Nybegynder
08. juni 2008 - 19:21 #1
Det er fordi du har vænnet dig til at arbejde med buttons, når du vil lave knapper, hvilket jo er et meget logisk valg. Men hér skal du ikke lave dine bolde som buttons, men som movieclips. Vi snupper et eksempel:


1. Lav en bold, der hopper, til et movieclip, som hedder BallMenu. Dine BallMenu's frames må ikke have nogen actions.

2. Nu skal du lave din BallMenu om til en klasse, som hedder JumpingBall. For at gøre dette, går du ind i dit library, højreklikker på bolden og trykker Linkage. Her slår du "Export for ActionScript" (eller hvad den nu hedder) til. "Export in first frame" vil også blive slået til, og det skal den også være. Skriv så i Class navnet på klassen - nemlig JumpingBall. Tryk Ok, og nu er din bold faktisk en klasse.

3. Lav en ny ActionScript-fil (File > New...), og i den skriver du følgende:

---
// En klasse er altid defineret inde i en package, så sådan en laver vi lige
package {
    // Importer flash.display.MovieClip, så vi kan vise, at JumpingBall er bygget
    // oven på et movieclip.
    import flash.display.MovieClip;
    // Importer også flash.events.MouseEvent, så vi kan opfange, når musen rammer
    // vores bold.
    // Og nu til klassen - extends betyder, at klassen er bygget på MovieClip-klassen.
    public class JumpingBall extends MovieClip {
        public function JumpingBall():void {
            // Vis at bolden skal stoppe på første frame.
            stop();
            // Hele tiden skal der testes, så vi laver lige en event, som gør, at der
            // hele tiden tjekkes. Tjekket består i, om cursoren rører bolden eller
            // ej.
            addEventListener(Event.ENTER_FRAME, CheckHit);
        }
        // Dette er det, der skal ske hele tiden (tjekket)
        private function CheckHit(E:Event):void {
            // Er bolden på frame et? Kun hvis bolden er på frame et, skal der
            // tjekkes. Alle andre tilfælde er ligemeget.
            if(currentFrame == 1) {
                // Stop med at hoppe
                stop();
                // Begynd på et hoppe igen (play), hvis cursoren rører bolden
                if(hitTestPoint(mouseX, mouseY, true)) {
                    play();
                }
            }
        }
    }
}
---

4. Prøv det lige af. Flash gider ikke at åbne for mig lige nu, så eksemplet er ikke testet af.
Avatar billede maqhem Nybegynder
08. juni 2008 - 19:23 #2
Din ActionScript-file skal du gemme som JumpingBall.as sammen med din fla-fil, hvor d benytter bolden.
Avatar billede satyriasis Nybegynder
08. juni 2008 - 21:39 #3
Tror at det er nemmere hvis du ser min .as fil. Har næsten lavet det på samme måde som du skriver, men har bare et lille problem, som jeg ikke kan løse selv.
Det hele kan hentes her: http://gundersen.popsmart.dk/bounce.zip

Min kode ser således ud:

package
{
    import flash.display.MovieClip;
    import flash.events.MouseEvent;
    import flash.events.Event;
    import flash.text.TextField;
   
   
    public class Script extends MovieClip
    {
        public function Script()
        {
            for(var i = 1; i < 5; i++)
            {
                this["btn"+i+"_mc"].ball_mc.stop();
                this["btn"+i+"_mc"].txtField.text = "Tekst"+i;
                this["btn"+i+"_mc"].addEventListener(MouseEvent.MOUSE_OVER, btnOver);
                this["btn"+i+"_mc"].addEventListener(MouseEvent.MOUSE_OUT, btnOut);
            }
        }
       
        function btnOver(event:MouseEvent):void
        {
            event.currentTarget.ball_mc.gotoAndPlay(2);
        }
       
        function btnOut(event:MouseEvent):void
        {
            addEventListener(Event.ENTER_FRAME, checker);
        }
       
        function checker(event)
        {
            if(btn1_mc.ball_mc.currentFrame == 1)
            {
                btn1_mc.ball_mc.stop();
                removeEventListener(Event.ENTER_FRAME, checker);
            }
        }
    }
}

Jeg kan sagtens få en knap til at virke. Ville gerne have currentTarget ned i min checker function, men så virker det ikke.
Er der et alternativ?
Avatar billede maqhem Nybegynder
08. juni 2008 - 22:02 #4
Grunden til, jeg netop lavede det, som jeg gjorde, var fordi, det så ville du med alle boldene. Er der en grund til, at du har sprunget det vigtigste element over? :)
Avatar billede satyriasis Nybegynder
12. august 2008 - 01:24 #5
fik desværre ikke løst mit spørgsmål præcis som jeg godt kunne tænke mig, så lukker det nu.
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