17. maj 2005 - 09:29Der 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 ?
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:
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.
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?
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:
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
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
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
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
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.
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...
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.
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);
Det ser jo ganske korrekt ud, men du skal måske huske at gøre mitMC2 inaktiv når mitMC er aktiv - og omvendt.
Synes godt om
Ny brugerNybegynder
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.