01. november 2004 - 18:37Der er
12 kommentarer og 1 løsning
actionscript duplicatemovieclips
Hej,
Efter jeg har leget med den her method i flere dage på at finde ud af hvorfor den ikke virkede, så kom jeg frem til at den MÅSKE kun kan bruges af BUTTON og ikke MovieClips.
Dvs. når jeg tilføjer på movieclips. on (release) { duplicateMovieClip("minclip", "ball2", 1); setProperty ("ball2", _x, "200"); }
så virker koden ikke, men hvis jeg tilføje den kode på Button, så virker koden ??
Det er bare mærkeligt, at jeg ikke får en fejl meddelse fra flash at man hellere ikke må bruge on (release) på movieclips.
Men er det jeg siger rigtige eller forkert, jeg er total i tvivl efter så mange prøvelser.
Jeg håber der er en derude der kan hjælp mig mit problem, så jeg kan komme videre :)
Du kan godt bruge on (release) på movieclips (det har man kunne siden flash MX).
Men scopet er anderledes. En knap refererer direkte til den tidlinie den ligger på, mens et movieclip refererer direkte til sin egen tidlinie. (og setProperty er ancient syntaks).
on (release) { duplicateMovieClip(_root.minclip, "ball2", 1); _root.ball2._x = 200; }
eller:
on (release) { _root.minclip.duplicateMovieClip("ball2", 1); _root.ball2._x = 200; }
Hos mig er det kun den første af dine eksempler der "virker". Og det ville jeg umiddelbart også have regnet med?
Er du helt med på hvordan stier i flash virker og hvad "_root" er? Når du duplikerer et movieclip med duplicateMovieClip bliver det nye instans kopieret ind i det kopieredes _parent. Altså hvis du kopierer et movieclip i _root vil det nye også ligge i _root. Og hvis du vil flytte det (eksempelvis med setProperty) så skal du pege på det med rette sti.
Jep, som jeg ser det så forstår jeg godt hvordan "path" eller noget "adressering" virker, men flash er lidt forvirrende nogen gange.
Som du nu selv siger, så mener du at de ikke alle 3 virker "kun den ene", hos virker 2, og en af dem ikke virke, det lyder da lidt mærkeligt, måske skulle jeg sende dig min .fla fil.
Den første er en movieclip metode, og tager kun et nyt instance navn og en dybde som parametre. Du kopierer altså movieclippet selv ved at kalde metoden på det.
Den anden er en global funktion der yderligere tager det movieclip du vil kopiere som parameter.
Basicly gør de det samme på en forskellig måde. Men der er f.eks forskel på hvad de returnerer og MovieClip.duplicateMovieClip() tillader også et initObject som parameter (ligesom MovieClip.attachMovie), det gør den globale funktion svjv ikke.
Når jeg siger at jeg ikke helt er med på dine eksempler er det fordi du konsekvent IKKE adresserer det nye movieclip, ved dets rette adresse:
on (release) { duplicateMovieClip(_root.minclip, "ball2", 1); setProperty (_root.ball2, _x, "200"); // ball2 er jo i roden. Det var det med fælles _parent }
Jeg ved ikke om actionscripts.org har deciderede tutorials om duplicateMovieClip, men det vil jeg umiddelbart tro. Det er under alle omstændigheder et meget godt sted.
Åbner flash MX. Tegner en rød cirkel (min sidste fill farve var rød). Markerer den røde cirkel og trykker F8, vælger movieclip.
Tegner en grøn firkant, trykker F8, vælger movieclip og giver den instancenavnet "minclip".
Hvis jeg paster dit første script ind på det røde movieclip og tester sker der ikke noget *synligt*. Retter jeg derimod stien kan jeg nu *se* at den grønne firkant er blevet kopieret, eftersom jeg nu har rykket den.
Hvis jeg paster dit andet script ind på den grønne sker der ikke noget. Hvis jeg derimod retter det til:
on (release) { this.duplicateMovieClip("ball2", 1); setProperty ("_parent.ball2", _x, "200"); }
Kan jeg nu se at jeg har kopieret pågældende movieclip og rykket det.
Det er muligt at tingene virker anderledes i MX 2004, jeg har det ikke installeret og kan derfor ikke teste.
Det lyder da mærkeligt. Sådan virker det, jeg har ingen forklare, måske har du (global, movieclip metode)
1. en movieclip (kaldt "minclip") som er en firkant 2. en anden movieclip, som er en cirkel 3. en knap button, som er trekantede.
1. i firkantet, selve movieclip som skal lave kopiere af ligger følgende kode: ------------------------------------------------- on (release) { _root.clip.duplicateMovieClip("ball2", 4); setProperty ("_root.clip", _x, "200"); } -------------------------------------------------
2. I cirklen (movieclip) ligger jeg følgende kode: ------------------------------------------------- on (release) { _parent.clip.duplicateMovieClip("ball2", 1); setProperty ("_parent.ball2", _x, "200"); } -------------------------------------------------
3. I trekantet (button) ligger jeg følgende kode: ------------------------------------------------- on (release) { duplicateMovieClip("_root.clip", "ball2", 2); setProperty ("_root.clip", _x, "200"); } -------------------------------------------------
Det er den eneste måde jeg fik dem til at virke, "this" virker ikke som du har beskrevet.
Det er mærkeligt at de fungere hver på sin egen måde, dvs. hvis en movieclip skal kopiere en anden movieclip, så gøre man det på en måde, hvis det er en knap der skal kopiere en movieclip, så gøre man det på en hele anden måde, og hvis en movieclip skal kopiere sig selv, så gøre man det også på en anden måde. forvirrende.
Åhh, nej glem hvad jeg siger, det er totalt mærkeligt, nu kan jeg godt bruge _root istedet for _parent.
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.