Avatar billede jakwag Nybegynder
22. april 2003 - 12:39 Der er 8 kommentarer og
2 løsninger

movieclip til array

Hey

this.createEmptyMovieClip("firkant_mc",1);
firkant_mc.lineStyle(2,0x000000,100);
firkant_mc.beginFill(0x903333,100);
firkant_mc.lineTo(50,0);
firkant_mc.lineTo(50,50);
firkant_mc.lineTo(0,50);
firkant_mc.lineTo(0,0);
firkant_mc.onRelease = function(){
    trace("fikanten lever");
}
//
firkant_mc = new Array("jakob","jens");
trace(firkant_mc[1])

Output =
jens
undefined
trykker man på firkanten er output = firkanten lever

Hvorfor forsvinder firkanten ikke når den bliver lavet om til et array objekt?
Man kan ikke længere komme i kontakt med den, men funktioner tilknyttet til den inden "transformeringen" virker stadig.

Hvorfor ville man nogen sinde ønske at gøre dette? Jeg ved det ikke, jeg prøver bare på at få en større forståelse for AS.

: ) Jakob
Avatar billede jakwag Nybegynder
22. april 2003 - 12:56 #1
hovsa, der mangler lige denne linie efter den første trace:

trace(firkant_mc._x)
Avatar billede thulstrup Nybegynder
22. april 2003 - 12:56 #2
Det er noget af det mærkeligste jeg længe har set :-)
Du kan ikke lave et movieclip om til en array, det er to helt forskellige ting. Du kan derimod f.eks. fjerne din firkant:
firkant_mc.clear()

eller du kan fjerne dit movieclip:
firkant_mc.removeMovieClip()
Avatar billede jakwag Nybegynder
22. april 2003 - 12:58 #3
Jeg kan sagtens lave mit movieclip om til en array. Men hvorfor forsvinder firkanten ikke? Det var mit spørgsmål.
Avatar billede thulstrup Nybegynder
22. april 2003 - 13:02 #4
Nej, du laver ikke dit movieclip om til en array. Du opretter en array ved navn firkant_mc og samtidig har du et movieclip ved navn firkant_mc.
Avatar billede barklund Nybegynder
22. april 2003 - 13:07 #5
Et movieclip er ikke en "variabel" som alle andre. Hvad skulle:

_root = "hej";

Så give? Skulle hele filmen forsvinde?

Det samme er tilfældet for Textfields og Buttons - bare fordi du ændrer en reference til objektet, så findes det endnu.

Sådan er det faktisk for alle objekter:

a = new Object();
a.hello = "world";
b = a;
delete a;
trace(b,hello); // "world";

Selvom "a" er slettet findes objektet endnu. Hvis jeg sletter b, så "findes" objektet stadig, men da der ingen "referencer" er til objektet overhovedet, så vil flashplayerens interne garbage collection slette objektet fra hukommelsen ved førstkommende lejlighed.

Tænk på:

outer = new Object();
outer.data = "hello world";
outer.inner = outer;
trace(outer.inner.inner.inner.data); // "hello world"
delete outer;

Nu kan man ikke via nogen variabel få fat i objektet "outer" længere, men da der stadig er en reference (inde i objektet selv), så bliver det ikke fjernet fra hukommelsen.

Prøv for eksempel at køre ovenstående 10000 gange og tjek processens ramforbrug - det er stort!

Sådan fungerer flash!

/Barklund
Avatar billede barklund Nybegynder
22. april 2003 - 13:09 #6
Som cellblock skriver: Du laver ikke dit movieclip om til noget, du fjerner dets reference og peger denne hen på et andet objekt (et array).

Movieclippet findes endnu, det har bare ingen reference, men da det ikke er rent script, så bliver det ikke slettet fra hukommelsen.
Avatar billede jakwag Nybegynder
22. april 2003 - 13:12 #7
cellBlock: nå ja, selvfølgelig gør jeg det. : )

Barklund: tak for den super beskrivelse.

Kan i to lige svare.
Avatar billede barklund Nybegynder
22. april 2003 - 13:14 #8
Et svar :)
Avatar billede thulstrup Nybegynder
22. april 2003 - 13:16 #9
Og et til :-)
Avatar billede barklund Nybegynder
22. april 2003 - 13:28 #10
Tark for det :)
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