Avatar billede marrix Juniormester
10. juni 2004 - 10:03 Der er 12 kommentarer og
1 løsning

Hvordan bruger jeg attachMovie i film med flere "lag"?

Hej eksperter

I forlængelse af to tidligere problemer (http://www.eksperten.dk/spm/506940 og http://www.eksperten.dk/spm/505559) er jeg nu stødt ind i nye problemer. Det kan i princippet beskrives således:

- mcA er et tomt movieclip, som - når filmen startes - skal "erstattes" med et tilfældig valgt foto (et andet movieclip).
- mcB indeholder blandt andet mcA, som her bliver afmasket mv.
- og så er der "hovedfilmen" (_root?), som blandt andet indeholder mcB.

Når den færdige flashfilm afvikles skal der vises et antal tilfældigt valgte fotos (som dog ikke skal udskiftes yderligere - filmen er temmelig statisk). Alle movieclips samt hovedfilmen består af kun 1 frame. Jeg har følgende funktion:

var ran;
function hentPic(){
  ran=random(5);
  _root.attachMovie("foto"+ran, "ny", 2000);
}

_root.hentPic();

Men...

- hvor skal funktionen lægges (i hovedfilmen, mcB eller andet?), hvis den skal fungere iht. ovenstående?
- skal _root i "_root.attachMovie("foto"+ran, "ny", 2000);" erstattes med navnet på det tomme movieclip eller noget helt andet?
- skal _root i "_root.hentPic();" erstattes med noget andet (eks. _parent)?
- er det et problem at filmen kun består af 1 frame?

Venligst, marianne
Avatar billede _k Nybegynder
10. juni 2004 - 10:36 #1
1) Din funktion skal ligge på main timeline (roden), men kun fordi det er dér du kalder den med _root.hentPic();
I princippet kan du placere en funktion på hvilken som helst tidslinje. Bare du refererer rigtigt til den. Havde du puttet den ind på timelinjen på "mcB", kunne du kalde den med _root.mcB.hentPic();

2) Når du sætter _root foran attachMovie bliver mc'et hentet ind i roden. Hvis du gerne vil have hentet dit tilfældige foto ind i f.eks. "mcB", kan du ganske rigtigt sætte det ind i stedet for _root: mcB.attachMovie("foto"+ran, "ny", 2000);"

3) Den svarede jeg så på 1.

4) Absolut nej. Tværtimod er det verdensklasse at lave film på kun 1 frame. Giver bedre overblik og gør det næsten altid nemmere at udbygge/fejlrette senere.
Et problem du dog kan støde ind i er, hvis du vil have en preloader på din film. Så skal du måske overveje nogle indledene frames, som kan afvikle en procenttæller eller andet loading-grafik.
Avatar billede marrix Juniormester
10. juni 2004 - 13:17 #2
...okay. Har tilpasset til ovenstående, men jeg kan stadig ikke få det til at virke helt efter hensigten.

Hvis jeg "attacher" direkte til _root,virker det. Men når jeg "attacher" til mit tomme movieclip, sker der ingenting.

Skal det tomme movieclip have nogle bestemte indstillinger (defineret en størrelse), et flueben i en eller anden properti eller andet? Indtil videre er det tilsyneladende det tomme movieclip, der ikke kan rumme det movieclip, som skal attaches...?!?

Venligst, marianne
Avatar billede _k Nybegynder
10. juni 2004 - 14:17 #3
Har du prøvet med (og husker du at give dit tomme mc et instansnavn?):

_root.nytMC.attachMovie("foto"+ran, "ny", 2000);

Bemærk, at den attacher til øverste venstre hjørne. Det betyder, at hvis dine koordinater for det mc du loader ind i er rimelig off-beat, kan det være den loader ind udenfor det synlige område. Prøv evt. at lave et dummy-nytMC.
Avatar billede marrix Juniormester
10. juni 2004 - 14:25 #4
...okay, prøver lige nogle af de nævnte muligheder. Vender tilbage senere (skal til møde om et øjeblik).
Avatar billede marrix Juniormester
10. juni 2004 - 22:04 #5
I første omgang havde jeg ikke givet mit tomme mc et instancenavn. Det har jeg gjort nu (tomtFoto), men uden det hjælper. Hvorfor er det nødvendigt med et instancenavn? Er det ikke nok med et (i properties) "Name" og "Identifier"?

Men jeg tror at mit problem skyldes, at jeg roder rundt i, hvor funktionen og kald af funktionen skal placeres i forhold til de tre lag i min flashfilm:

_root eller hovedfilmen. Her har jeg blandt andet følgende mc:

"front" er en mc, som blandt andet afmasker flere andre indlejrede mc, blandt andet:

"tomtFoto" som er et mc aldeles blottet for indhold. Dette tomme mc skal udfyldes af et andet mc (eksempelvis ved navn "foto_v_1"), når filmen startes.

...så hvor anbefaler du mig at indlejre min funktion? Og hvad skal der stå i et-eller-andet.attachMovie()?
...og hvorfra skal jeg kalde min funktion? Og hvordan skal funktionen i så fald defineres et-eller-andet.hentPic()?
Avatar billede _k Nybegynder
11. juni 2004 - 14:12 #6
Du skal altid skrive et navn på dit mc hvis du vil flytte rundt på det, skalere det, eller attache et nyt mc til det. Det er instance-navnet der gør, at Flash ved hvad du mener.
Det navn du skriver efter du har klikket F8 er kun så du kan finde rundt i dit bibliotek.

Har du husket at give det mc du vil attache et linkage-navn i biblioteket? (ctrl-L)

Hvordan lagene ligger betyder ikke det store. De bruges stort set kun til at stable dine ting, så du har kontrol over hvad der ligger ovenpå hvad. Det er dog god skik at skrive sin actionscript kode på øverste frame, da det er den som bliver loadet først når en swf eksekveres.
Du bør derfor placere din funktion på øverste frame i main timeline, og kalde den samme sted. Så behøver du nemlig heller ikke at angive en relativ sti til hvor funktionen befinder sig:

hentPic();
Avatar billede marrix Juniormester
13. juni 2004 - 23:09 #7
...jeg fatter det ikke. Jeg har brugt det meste af weekenden på at finde ud af, hvad det er jeg gør galt. Hvis jeg laver en meget simpel flashfilm, og genbruger koderne og kopierer indstillingerne fra den oprindelige film, ja så virker det helt som det skal. Men i den oprindelige film kan jeg simpelthen ikke få det til at virke.

Jeg synes jeg har været omkring ALT. Læste et sted, at "shared library" giver problemer med attachMovie - men så vidt jeg kan se, er der ikke tale om "shared library" i det her tilfælde.

Så hvor p.... skal jeg nu lede efter en løsning. Jeg er ved at være helt tom for ideer.... Nogle gode forslag til hvad jeg kan prøve? Jeg er næsten ved at opgive, men det SKAL altså virke... Øvøvøv...
Avatar billede marrix Juniormester
14. juni 2004 - 10:55 #8
...nu har jeg testet lidt videre igen igen. Når jeg tager det tomme movieclip (dets instance) og flytter det helt ud i filmens _root (hovedfilmen), så virker funktionen fint. Så hvorfor dur det ikke når jeg gør det samme inde i et movieclip???
Avatar billede marrix Juniormester
14. juni 2004 - 11:01 #9
Hæhæ...nu virker det. Funktionen virker åbenbar kun, hvis jeg har den liggende i det movieclip, hvori det attach'ede movieclip ligger. Kan ikke helt forstå hvorfor det er sådan...men det virker endelig og jeg er lykkelig.

Så >>k gider du give mig et svar, så jeg kan tildele dig points... :)

Marianne
Avatar billede _k Nybegynder
14. juni 2004 - 15:31 #10
Orv, man skal bare kaste dig ud i en omgang "trial-and-error", så finder du selv svarene ;)

Du har ret i, at det her problem ikke har noget med Shared Libraries at gøre. Det er noget helt andet (og betydeligt mere kompliceret...)

Din løsnig kan skyldes, at der refereres til _root inde i funktionen. Er det det der har forvirret?
Avatar billede marrix Juniormester
14. juni 2004 - 18:12 #11
Tja....jeg ved ikke rigtigt, hvad det egentlig er, der har forvirret mig. Jeg har haft funktionen og funktionskaldet liggende i alle mulige kombinationer på de forskellige movieclips - uden virkning. Men det var før, du nævnte det der med vigtigtheden af et instancenavn (havde jeg nemlig ikke i første omgang). Så da jeg tog turen rundt igen, med funktion og kalder i alle tænkelige kombinationer, gav det pludselig pote...Hurra for det. Så tak for hjælpen... :)

Allervenligst, marianne
Avatar billede _k Nybegynder
15. juni 2004 - 09:54 #12
Selv tak, tak for point og held og lykke med at få bikset det hele sammen, så det fungerer. Ta' evt. 5 min og læs om "_root" og "_parent" i Flash-hjælpen. Kan huske selv at have problemer med at forstå det, men pludselig ser man lyset :)
Avatar billede marrix Juniormester
15. juni 2004 - 13:03 #13
Tak for det gode råd...vil straks tage det til mig...så har jeg også noget at hygge mig med til aftentheen ;))
Marianne
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

IT-JOB

Kræftens Bekæmpelse

IT-driftsleder

Politiets Efterretningstjeneste

IT-løsningsarkitekt i PET

Capgemini Danmark A/S

AI/Data Engineer