15. oktober 2005 - 10:58Der er
10 kommentarer og 1 løsning
CreateEmptyMovieClip hjælp ønskes!
goddag eksperter lidt tømmermandsramt sidder jeg og har pludselig mistet overblikket ;)
anyway jeg har en flashside (flash8) jeg har en række statisk indhold og så har jeg i indholdfelt som er det eneste der ændrer sig (der står både text og grafik fra start af) indtil videre alt i 1 frame.
jeg havde tænkt mig at skrive: createEmptyMovieClip("indholdMC", 1):
i første frame som frameaction
så på en knap ville jeg skrive: on (release) { indholdMC.loadmovie(indholdsmappe/nummer1.swf); }
det skulle virke..
men når jeg så har klikket på en række links vil de "gamle" nummerx.swf ligge i hukommelsen og trække cpu?
og det vigtige spørgsmål: hvordan kommer jeg tilbage til "forsiden" altså frame 1 uden nogen loadede movies ovenpå.
jeg kunne skrive: indholdMC.removeMovieclip():
men det er noget rod for så ryger createEmptyMovieClip jo? så skal jeg lave noget med at filmen hopper mellem 2 frames første med create andet med remove, men det er da noget rod.
kan jeg i selve den .swf der loades ind lave en unload.self agtig ting???
så ledes at alt stadigvæk foregår i 1 frame og der hele tiden ligger en createEmptyMovieClip der?
det lyder ret banalt, dog mere end hvad min lille hjerne kan kapere idag...
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
1: Når du loader ind i et mc, uanset om det er lavet med createEmptyMovieClip() eller ej, overskriver du indholdet i mc'et. Dvs. at flere mc'er ikke loaded ind i samme mc hele tiden overskriver hinanden. Du kan derfor ikke vende tilbage til et tidligere loadet indhold, men bliver nødt til at loade det igen.
2: Når du laver et mc vha. actionscript bliver mc'et ikke bundet til den frame det er kaldt på. Det ligger sig bare oven i alt andet og forsvinder ikke før du med script fjerner det igen (f.eks. removeMovieClip()) Hvis din forside derfor ligger nederst, altså udenfor dine load-mc'er, skal du bare derfor bare fjerne dine loadede mc'er igen - eller gøre dem usynlige med mc._visible = false;
3: Du kan godt lege med unLoad() metoden, men hvis du bruger ovenstående forslag, så glem den indtil videre...
4: God fornøjelse med tømmermændende, håber ikke at jeg har givet dig mere hovedpine ;o)
2: jeg vil egentligt bare fjerne dem, det er ringe sandsynligt at man efter at have læst vil tilbage samme sted.
3: jep men hvordan?
3.1: unLoad.self() vil altså fjerne swuffen MEN bevare det "emptyMovieclip" således at jeg kun skal place createEmptyMovieClip("indholdMC", 1): 'een gang og resten kan så blot være:
på hent knap:(main movie) on (release) { indholdMC.loadmovie(indholdsmappe/nummer1.swf); }
Og på luk knap (i den loadede .swf) on (release) { unLoad.self(); }
eller som frameaction (i det loadede SWF): unLoad.self();
det ville da umidelbart være det nemmeste ??? (jeg har desværre ikke flash her på fruens PC til selv at checkke, men vil MEGET gerne have det på plads " i hovedet".
4: det bliver bedre, papbundet pepperoni pizza kan gøre underværker
Nu ved jeg ikke hvor du har det der "unLoad.sef()" fra, men det er vist ikke en metode der eksisterer i AS? Til gengæld kan du sagtens bruge unLoadMovie() sammen med this (og når du har et mc, kan "this" godt forstås som "self" - er det ikke et php-udtryk?). Dvs. at sidder din "luk"-knap inde i indholdMC, kan du unloade med this.unLoadMovie() (måske this._parent.unLoadMovie() hvis dit kald sidder inde i et mc?)
Dit struktur lyder ellers ganske fornuftig, så se om det ikke duer fint nok når du får prøvet det af? Ellers vend endelig tilbage.
Som du nok har gættet, er det fordi du fjerner det mc du loader ind i med removeMovieClip(). Du kan gøre 2 ting. Enten kan du bruge unLoadMovie() i stedet for removeMovieClip() (skal bruges på samme måde), eller også skal du lave et nyt tomt mc umiddelbart før du kalder loadMovie(). Sidstnævnte løsning kan godt virke lidt skør, men da det kræver stort set intet processorkraft at lave et tomt mc, er det faktisk en ganske holdbar, og meget anvendt, løsning.
jeg kan ikke umidelbart se hvad der skulle være smart ved option No.2? ved unloadMovie beholder jeg jo "containeren" (det tomme clip på main stage) og loader bare ind og ud af det. det andet (at lave ny emptyClip på ny hvergang) virker umidelbart som dobbeltarbejde? (or am i missing something)
anyway smid et svar, nu virker det, tak for hjælpen :-)
forresten lidt irreterende med den case-sensitivitet (fx unLoad vs unload) har du et godt sted hvor der er lidt gennemskuelig info på hvornå man bruger det en frem for det andet? det virker umudelbart ikke helt logisk.
Hvis du anvender ActionScript2 (hvilket vil sige Flash MX 2004 og Flash 8 som default skal alt hele tiden være case-sensitive. Hvis du bruger AS1, som du i dine publish settings godt kan bede dine film om at være, er store og små bogstaver ligemeget. Tommelfingerreglen er, at du altid tager højde for case-sensitivitet. Det er både kønnere, mere stabilt og så er du ikke afhængig af en "flink" compiler som måske alligevel ryger ud af Flash engang i fremtiden.
At skabe og destruere mc'er er som sagt ganske almindeligt når man arbejder i Flash. Du har helt ret i, at i dit eks. virker det lidt tosset at fjerne og skabe det samme mc igen og igen. Når du har overblikket over dit projekt så lad endeligt være. Men begynder du på et tidspunkt at lave større projekter, hvor du måske også laver genbrugelige klasser, kan det hurtigt blive ret ufleksibelt hvis man skal kende navnet på et bestemt mc for at kunne gøre noget. Så det handler nok mest om overblik og hvad man skal bruge sin kode til. Nu ved du i hver fald at du kan ;o)
...og det skulle så være et svar - men det ER jo mandag morgen!
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.