Avatar billede pelskee Nybegynder
17. maj 2005 - 09:29 Der er 20 kommentarer og
1 løsning

Undersøg hvor på x-aksen et movieclip er

hvordan kan jeg ændre nedenstående kode på mit mc når de først kalder (_root.tekstKontakt.gotoAndPlay(2);) når movieklippet er kommet til 0 på x aksen. Tillæg: kan jeg flytte 2 movieclips på samme tid med easing ?

onClipEvent (load) {
    _root.targetx = 116;
    speed = 4;
    _root.onEnterFrame = function() {
        _x += (_root.targetx-_x)/speed;
    };
}
onClipEvent (enterFrame) {
    if (_x == targetx) {
        delete this.onEnterFrame;
    }
}
on (release) {
    if (_root.targetx >= 116) {
        _root.targetx = 0;
        _root.tekstKontakt.gotoAndPlay(2);
    }
    else {
        _root.targetx = 116;
        _root.tekstKontakt.gotoAndPlay(20);
    }
}
Avatar billede _k Nybegynder
17. maj 2005 - 11:59 #1
onClipEvent (load) {
    _root.targetx = 116;
    speed = 4;
    _root.onEnterFrame = function() {
        _x += (_root.targetx-_x)/speed;
    };
}
onClipEvent (enterFrame) {
    if (_x == targetx) {
        _root.tekstKontakt.gotoAndPlay(2);
        delete this.onEnterFrame;
    }
}
on (release) {
    if (_root.targetx >= 116) {
        _root.targetx = 0;
    }
    else {
        _root.targetx = 116;
        _root.tekstKontakt.gotoAndPlay(20);
    }
}

????

Jeg savner en mere nøjagtig beskrivelse af hvad det er du vil. Hvor kommer x-pos 0 ind i billedet?

Du kan godt flytte 2 mc'er samtidig. Spørgsmålet er bare, hvor du vil gøre det fra? Det kunne jo være fra din første onEnterFrame funktion, hvor du kan kalde dit andet mc's x-pos:

_root.onEnterFrame = function() {
        _x += (_root.targetx-_x)/speed;
        _parent.ditAndetMC += enEllerAndenVærdiJegIkkeKender; // Måske bare 1?
    };
Avatar billede _k Nybegynder
17. maj 2005 - 12:02 #2
... og det nederste skulle vist have været:

_root.onEnterFrame = function() {
        _x += (_root.targetx-_x)/speed;
        _parent.ditAndetMC._x += enEllerAndenVærdiJegIkkeKender; // Måske bare 1?
    };

...jeg skulle jo lige huske at det var x-værdien der skulle flyttes rundt på ;)
Avatar billede pelskee Nybegynder
17. maj 2005 - 15:02 #3
tak _K - lurer på det nu. vender tilbage asap
Avatar billede pelskee Nybegynder
17. maj 2005 - 15:13 #4
http://www.segafredo.dk/flash/newindex.html

den folder ikke ud når den kommer til 0 på x asken, det skal den gøre efter den første animation den laver når man har klikket på den 1st gang.

jeg ville gerne flytte begge billeder på samme tid - altså på 1st klik.

denne kode spiser den ikke:
_root.onEnterFrame = function() {
        _x += (_root.targetx-_x)/speed;
        _parent.omos._x += 20;
    }
Avatar billede pelskee Nybegynder
17. maj 2005 - 15:17 #5
når MC tekstKontakt ankommmer til x-aksens 0 skal den afspille  _root.tekstKontakt.gotoAndPlay(2);
Avatar billede _k Nybegynder
17. maj 2005 - 16:43 #6
Er det noget i retning af det her? Har ikke selv testet. Kodemæssigt bliver det også hurtigt noget juks, når du anvender den gamle syntaks.

onClipEvent (load) {
    _root.targetx = 116;
    speed = 4;
    function myFunk() {
        _root.onEnterFrame = function() {
            _x += (_root.targetx-_x)/speed;
            _root.mc2._x += (_root.targetx-_root.mc2._x)/speed;
            trace(_x + " <= " + _root.targetx);
            if (_x <= _root.targetx) {
                  gotoAndStop(10);
                delete _root.onEnterFrame;
                }
        };
    }
    myFunk();
}

on (release) {
    if (_root.targetx == 116) {
        _root.targetx = 0;
    }
    else {
        _root.targetx = 116;
        _root.tekstKontakt.gotoAndPlay(20);
    }
    myFunk();
}


...du skal så kalde dit mc nr. 2 for "mc2", eller ændre dets navn i koden.
Avatar billede pelskee Nybegynder
17. maj 2005 - 16:50 #7
dope - så flytter den begge 2 på samme tid. Men den folder ikke teksten ud når den når til 0 på x-aksen og når den flytter dem tilbage sker det ikke med easing.

Er koden lavet i en gammel syntaks ?
Avatar billede _k Nybegynder
17. maj 2005 - 17:00 #8
15:13:40: "jeg ville gerne flytte begge billeder på samme tid" - hvis de ikke skal flyttes samtidig, hvad skal de så?

Jeg fik vist skrevet gotoAndStop(10); i stedet for gotoAndPlay(10); i onEnterFramen. Så skulle den gerne folde ud.

Og ja, du anvender pre-MX syntaks, når du placerer koden på movieclips. Specielt når man vil lave noget animation en smule avanceret, kan det godt betale sig i stedet at scripte i en keyframe på tidslinjen.

Jeg har stadigvæk svært ved at forestille mig hvad der skal ske når mc'et er flyttet første gang. Kan du ikke tegne eller beskrive det lidt nøjere? Skal det forstås som en menu eller noget?

Smutter nu, så kan evt. først svare i morgen.
Avatar billede pelskee Nybegynder
17. maj 2005 - 20:50 #9
okay :)

koden er lavet ud fra noget jeg har fundet her på eksperten. som du sikkert har regnet ud er jeg ikke god til scripting.

jeg prøver at beskrive det nøjere:

1. de to kasser skal glide på plads fra start til deres position (116)
2. når man klikker på en af dem skal de begge to glide til position (0)
3. alt efter om man har klikket på 'kontakt' eller 'om os' skal den tilhørende tekst folde sig ud når kasserne når position (0) så de er gledet ud af det område jeg vil vise teksten i
4. hvis mit første klik har været 'kontakt' og jeg nu klikker på 'om os' skal 'kontakt' teksten folde sig sammen og bagefter skal 'om os' teksten folde sig ud

giver det mening ?

jeg har skrevet koden som nedenstående men det virker ikke:

onClipEvent (load) {
    _root.targetx = 116;
    speed = 4;
    function myFunk() {
        _root.onEnterFrame = function() {
            _x += (_root.targetx-_x)/speed;
            _root.mc2._x += (_root.targetx-_root.mc2._x)/speed;
            trace(_x + " <= " + _root.targetx);
            if (_x <= _root.targetx) {
                _root.tekstKontakt.gotoAndPlay(2);
                delete _root.onEnterFrame;
                }
        };
    }
    myFunk();
}

on (release) {
    if (_root.targetx == 116) {
        _root.targetx = 0;
    }
    else {
        _root.targetx = 116;
        _root.tekstKontakt.gotoAndPlay(20);
    }
    myFunk();
}
Avatar billede _k Nybegynder
18. maj 2005 - 12:01 #10
Det du vil er forholdsvis kompliceret når det skal scriptes. Ganske enkelt fordi du kan havne i en række forskellige tilstande du bliver nødt til at tage højde for.

Jeg har tilladt mig at omskrive dit script. Du skal nu smide scriptet ind i en keyframe, gerne på et lag for sig selv over laget med dine knapper/menupunkter. Du skal så give dine menupunkter navnene "mitMC" og "mitMC2". Alternativt kan du ændre i scriptet og erstatte dem med noget mere sigende. Jeg har skruet det så dynamisk sammen, at de kan hedde hvad som helst. Det er kun i funktionskaldet de bør optræde.
Ideen med denne struktur er, at du kan genbruge funktionen igen og igen. Som du ser, kalder jeg funktionen 2 gange efter hinanden for at sætte dine mc'ers animationer igang. Det giver dig større frihed og du kan sætte mc'ernes slutpositioner uafhængigt af hinanden.

var speed:Number = 4;
// Funktionen tager parametrene: MC'ets navn, MC'ets slutposition og om MC'et skal slutte med at afspille en indlejret frame
function moveMC(mc:MovieClip, targetx:Number, pressed:Boolean) {
    mc.onEnterFrame = function() {
            mc._x += (targetx - mc._x)/speed;
            if (mc._x <= targetx) {
                if(pressed) { // Hvis animationen er blevet sat igang fra en knap
                    mc.gotoAndStop(10);
                }
                delete mc.onEnterFrame;
                }
        }
}

moveMC(mitMC, 116); // MC et animationen sættes igang
moveMC(mitMC2, 116); // Det andet MCs animation sættes igang


mitMC.onPress = function() {
    moveMC(this, 0, true);
    moveMC(mitMC2, 0);
};

mitMC2.onPress = function() {
    moveMC(this, 0, true);
    moveMC(mitMC, 0);
};
Avatar billede pelskee Nybegynder
18. maj 2005 - 12:13 #11
det er fanme sejt k. når jeg så skal afspille den der tekst kan jeg så lave noget i retning af:

if mitMC._x = 0 {
_root.tekstKontakt.gotoAndPlay(20);
}

eller kan jeg bruge 'og om MC'et skal slutte med at afspille en indlejret frame
' til at sætte et andet movieclip igang når et af MC når klikkes eller når position 0
Avatar billede pelskee Nybegynder
18. maj 2005 - 12:15 #12
nej det er jo total svært det jeg prøver for så skal den også vide hvilken tekst mc der er foldet ud så den kan folde det rigtige sammen inden den folder et nyt ud
Avatar billede pelskee Nybegynder
18. maj 2005 - 12:29 #13
Avatar billede pelskee Nybegynder
18. maj 2005 - 12:34 #14
koden ser sådan ud nu:
var speed:Number = 4;
// Funktionen tager parametrene: MC'ets navn, MC'ets slutposition og om MC'et skal slutte med at afspille en indlejret frame
function moveMC(mc:MovieClip, targetx:Number, pressed:Boolean) {
    mc.onEnterFrame = function() {
            mc._x += (targetx - mc._x)/speed;
            if (mc._x <= targetx) {
                if(pressed) { // Hvis animationen er blevet sat igang fra en knap
                    _root.tekstKontakt.gotoAndPlay(2);
                }
                delete mc.onEnterFrame;
                }
        }
}

moveMC(mitMC, 380); // MC et animationen sættes igang
moveMC(mitMC2, 380); // Det andet MCs animation sættes igang


mitMC.onPress = function() {
    moveMC(this, 0, true);
    moveMC(mitMC2, 0);
};

mitMC2.onPress = function() {
    moveMC(this, 380, true);
    moveMC(mitMC, 380);
};


når man klikker på mitMC2 flytter de sig uden easing.
Avatar billede _k Nybegynder
18. maj 2005 - 14:18 #15
Ovensående script var nu også mere beregnet til at sætte dig igang, end det var den egentlige løsning. Det gør nemlig kun det du skrev i dine punkter. Hvordan det skal opføre sig efterfølgende aner jeg jo ikke - men der skal helt sikkert scriptes lidt mere.

Du kan godt holde styr på hvad der er åbent hvornår. Du kan jo sætte en variabel som fortæller hvilket menupunkt der er åbent nu. Når man så vælger et andet menupunkt, kan det bede det gamle om at lukke ned. Her vil jeg så anbefale, at du lukker det gamle og åbner det nye samtidig. Ellers roder du dig ud i endnu flere tilstande der kræver mere scripting for at være skudsikre.
Ideen er altså at du sætter indholdet af din variabel i starten af funktionen og smider den ind i if-sætningen når den skal eksekveres. Leg lidt med det.
Avatar billede pelskee Nybegynder
20. maj 2005 - 11:42 #16
jeg har indsat 1 ekstra parameter så jeg kan holde styr på om en knap overhovedet har været klikket. For jeg skal ikke folde teksten til Om os sammen inden jeg viser Kontakt teksten hvis Om os teksten ikke har været klikket...

Nej jeg kan slet ikke overskue det. Holde styr på om en knap er klikket og så gøre et hvis den er klikket og noget andet hvis den ikke er klikket og samtidig flytte movieclips med easing...

ærgerligt

men du skal have point for al din hjælp. Tak!
Avatar billede _k Nybegynder
20. maj 2005 - 12:12 #17
Du kunne måske kigge lidt på "swich case" funktionen i AS. Det er egentlig bare en ændret udgave af if-conditions, men den kan relativt simpelt holde styr på mange tilstande og dermed f.eks. mange menupunkter.

Her er et svar.
Avatar billede pelskee Nybegynder
20. maj 2005 - 12:58 #18
tak :)
Avatar billede _k Nybegynder
20. maj 2005 - 13:16 #19
Selv tak - og tak for point :o)
Avatar billede pelskee Nybegynder
20. maj 2005 - 13:27 #20
så skal jeg lave noget hvor når man klikker på et MC sætter den det MC til aktiv og så kan jeg spørge efter statusa ala (jeg kan lidt asp derfor ser koden nok fucked ud):

mitMC.onPress
this=aktiv
if mitMC2=aktiv
    _root.tekst.gotoandPlay(2);
else
    _root.tekst.gotoandPlay(20);

mitMC2.onPress
this=aktiv
if mitMC=aktiv
    _root.tekst.gotoandPlay(10);
else
    _root.tekst.gotoandPlay(5);
Avatar billede _k Nybegynder
20. maj 2005 - 17:47 #21
Det ser jo ganske korrekt ud, men du skal måske huske at gøre mitMC2 inaktiv når mitMC er aktiv - og omvendt.
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