29. januar 2001 - 10:53Der er
19 kommentarer og 2 løsninger
Variables ??
Jeg har rodet med dette vildt længe.
Jeg har 12 movie-clips p stagen med hver deres instance navn (fra 1-12). Hver film er på 12 frames (et billede tweenes fra alpha 0 til 100 hvorefter jeg lægger en stop action. Herefter tweenes billedet fra 100 til 0). Jeg har 12 knapper på stagen. Når jeg trykker på 1. knap skal 1. film afspille fra frame 0 til stop action på frame 6. Når jeg så trykker på eks. knap 6 skal 1. film afspille fra frame 6 til slut og 6. film skal afspille fra frame 1 og stoppe ved frame 6(stop action). Kan i begynde at se mit problem?? Der er 12 forskellige film. Når jeg eks. trykker på 10. film skal jeg vide hvilken film der er blevet afspillet og er stoppet på frame 6... Jeg har prøvet med if/else sætninger, men de fylder så meget i koden at filmes afvikles langsomt. Please help me!!! Jeg giver også gerne flere point - bare hjælp mig!
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
Hej -det her er ikke afprøvet, men det er noget i den stil du skal have fat på.
Hvis der er loaded en film, tildeles den variable \'FilmLoaded\' svarende til det nummer din film har. Derefter tjekkes der om der allerede er en film Loaded. Hvis det er tilfældet afspilles frame nr. 6 i pågældende film. Til sidst tildeles Variablen \'FilmUnload\' variablen \'FilmLoaded\' så den er klar til blive afviklet næste gang.... -kan du følge mig ?
on (release) { loadMovieNum (\"film2.swf\", 2); FilmLoaded = \"2\"; } on (release) { if (FilmUnload ne \"\") { tellTarget (\"_root.film\"(Number(FilmUnload))) { gotoAndPlay (6); } } } on (release) { FilmUnload = FilmLoaded; }
Du kan sagtens lave 12 film og styre det med if/else sætninger. men performance af hænger hvor du skriver dit ActionScript. Det er en af de store problemer, som mange Flash programmører har i dag.
Der er nemlig 4 muligheder:
1. Du kan lave et layer der kaldes Action i hoved filmen med ActionScript i de enkelte frames. 2. Du laver en movie med labels indeholdende ActionScript. 3. ActionScript i de enkelte film. 4. ActionScript på en knap.
Tak for tippet diktator!! Det ligner noget af det jeg er ude efter... Jeg vil lige prøve og se om det virker. Din metode krever dog at disse movieclips skal loades ind. Har jeg ret?? Det øverste du skriver er at film2.swf skal loades ind på level 2 - den er jeg med på.
Det script du skriver i midten er en gåde for mig! Gidder du forklare nærmere ?!?
Du behøver ikke loade en film for at få en god performance, du kan nøjes med at bruge tellTarget. Samtidig kan du bruge globale variabler til at undersøge, hvilken film der har været aktiv sidst.
En del af diktator kommandoer findes overhovedet ikke i Flash 5.0. Jeg har arbejdet med flash i 10 måneder, og har lavet flere spil i programmet. Så jeg kender flash rimelig godt.
Scriptet i midten tjekker om variable \'FilmUnload\' er tom. ne = Not Equal Hvis det ikke er tom eksekveres scriptet og ved hjælp af \'FilmUnload = FilmLoaded\' kan jeg nu TellTarget til sidst loaded film.
Det kan godt være at TellTarget skal ændres til:
on (release) { if (FilmUnload ne \"\") { GoTo = \"_root.film\"(Number(FilmUnload)); tellTarget (GoTo) { gotoAndPlay (6); } } }
Jeg ved ikke hvilke kommandoer hoejrup hentyder til ikke findes i Flash!? Men det kan være at han vil uddybe det.....?
Jeg har fået det til at virke når jeg lægge al scriptene i hver enkelt knap, men som du siger så tærrer det på min performance. Jeg har 12 if/else cases på hver knap + lidt mere. Hvordan kan jeg så finde ud af hvilken film der sidst er blevet afspillet. (Som det er nu benytter jeg tellTarget, hvor hver film har et instance navn...)
Den sidst spillede film får variable; \'FilmUnload\' som svarer til dit instance navn på den sidst afspillede film.
I mit eksempel hedder en film f.eks: film2.swf, den giver du instance navn= film2 Min Goto variable sætter det sidst afspillede instance navn til: GoTo = \"_root.film\"(Number(FilmUnload));
Som svarer til: GoTo = \"_root.film2\"
Mit TellTarget bliver så: tellTarget (GoTo) { gotoAndPlay (6); }
Så afspilles film2 i 6 frame...
Derefter får variable FilmUnload tildelt et nyt instance navn, nemlig fra den film du nu loader ind.
De 12 if/else case kan du komme ind i et movie klip, så skal du kun lave dem en gang. Så laver du et kald til funktionen i movie klippet. Derefter laver du et layer på hoved movien, hvor du trækker movien ud på. Derefter tildeler du instance navnet på movien.
Hvert moviklip får en variabel med en værdi,
Movie 1 variabel _root.film = 1 Movie 2 variabel _root.film = 2 mv.
Så kan du se hvilken movie der har været aktiv sidst.
Den film der skal kører fra frame 0 til slut skal ikke have en variabel.
hoejrup ==> Din metode virker men jeg har fundet ud af at det ikke er koden der sætter performance ned men der er moviecilippene...når jeg prøver med 2-3 clips virker det fint også hastigheds mæssigt. Jeg skal prøve med den måde diktator siger.
diktator ==>
Kan du ikke skrive en sammenhængende kode. Hvilken kode skal lægges på hvilken knap...osv. Jeg har prøvet på den måde du har skrevet, men jeg kan ikke få det til at funke... hvad mener du med _root.film ?? Skriv en lidt mere detaljeret og præsis gennemgang og pointene er dine !!
diktator ==> Til flash 4 tak...du har reddet min dag hvis du kan hjælpe mig..jeg har rodet med det de sidste par dage !!! (Hvis du har tid må du også gerne skrive det til Flash 5)
Følgende er script til knap 1 der starter MC film1 i første frame.
Derudover tjekker den om der har været loaded et foregående MC. Hvis der har været et MC før film, har variable \'FilmUnload\' værdien af denne og der laves et TellTarget til frame 6.
Derefter får variable \'FilmUnload\' en ny værdi, nemlig den der lige er loaded;
FilmLoaded = \"1\"; FilmUnload = FilmLoaded;
Så vil det være Film1 der bliver den næste i rækken, der ryger til frame 6.
Dette eks. refererer til MC, der allerede eksisterer i hovedfilmen og har fået tildelt instance names; Film1, Film2, Film3 etc. –du kan selv tilpasse scriptet hvis du ønsker at loade nye film udefra din hovedmovie og tildele dem instance names. Jeg ved ikke hvad det skal bruges til så derfor kan jeg heller ikke sige hvad der er mest hensigtsmæssigt....
Dine efterfølgende knapper skal selvfølgelig have samme action, hvor du lige ændrer tellTarget (\"film1\") og FilmLoaded = \"1\"; til de rigtige værdier....
Det kan sikkert laves på mange andre måder, nogle måske smartere end det jeg foreslår, men det kan være lidt svært at bedømme når man ikke selv sider med fla\'en :-)
Synes godt om
Slettet bruger
30. juni 2002 - 21:44#14
Hmmm... Jeg tænder lige op i en gammel tråd som egentligt ikke har noget med spørgsmålet af gøre. Jeg syntes at ovenstående kode har fået en anden syntax end den oprindelige postede kode.
På min Pc'er ser det ud som om at alle semikolon har fået et backslash foran sig, og derfor vil jeg lige afprøve min tvivl om et evt. bug her på siden.
Jeg kan godt se at problemet har været der tidligere, men det ser jo ikke ud til at det er der længere?
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.