Avatar billede lumatron Nybegynder
15. oktober 2005 - 10:58 Der 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...
Avatar billede lumatron Nybegynder
15. oktober 2005 - 11:00 #1
kan jeg i selve den .swf der loades ind lave en unload.self agtig ting???
HER menes som "frameaction" i den loadede swuf.
Avatar billede _k Nybegynder
15. oktober 2005 - 12:29 #2
Et par grundlæggende betragtninger:

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)
Avatar billede lumatron Nybegynder
15. oktober 2005 - 13:51 #3
1: okidoki! det er fint nok, den er jeg med på ;)

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

80)
Avatar billede _k Nybegynder
16. oktober 2005 - 12:25 #4
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.
Avatar billede lumatron Nybegynder
16. oktober 2005 - 15:40 #5
unLoad.self var bare et gæt, som forklarede hvad jeg ville
hved egentlig ikke hvar det kom fra..  ;)


MEN jeg kan nu unlaode filen med:

stop();
this.removeMovieClip();

(ligger som frameaction efter en fade-out tranisition)

det virker fint, MEN derefter kan jeg ikke loade nyt ind iden "empty" MC som igger i main filen.


altså nu har jeg:

i main filen (som kun har 1 frame) ligger:
createEmptyMovieClip("indholdMC", 1);

på en knap i main filen ligger så:
on (release){
  indholdMC.loadMovie("loads/1.swf");

på knappen i den loadede fil ligger en play();
som spiller et par frames hen til sidste frame hvor der nu ligger:

stop();
this.removeMovieClip();


altså den unloader OK, men  andre)"emptyClip" main fil, virker ikke efterfølgende (hverken med samme fil eller)



=?
Avatar billede lumatron Nybegynder
16. oktober 2005 - 15:43 #6
sidste linje =
altså den unloader OK, men "emptyClipet" i main fil, virker ikke efterfølgende (hverken med samme fil eller andre loads)

såry!
;)
Avatar billede _k Nybegynder
16. oktober 2005 - 15:48 #7
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.
Avatar billede lumatron Nybegynder
17. oktober 2005 - 06:44 #8
ok! det virker nu med;
this.unloadMovie();

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 :-)
Avatar billede lumatron Nybegynder
17. oktober 2005 - 06:47 #9
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.
Avatar billede _k Nybegynder
17. oktober 2005 - 09:31 #10
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)
Avatar billede _k Nybegynder
17. oktober 2005 - 09:32 #11
...og det skulle så være et svar - men det ER jo mandag morgen!
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