17. november 2001 - 10:03Der er
5 kommentarer og 1 løsning
duplicateMovieClip
on (release) { duplicateMovieClip (\"/vindue\", \"/vindue\" add x, x); x = Number(x)+1; }
Hvorfor skal der stå
Hvis ikke du forstår så bare forklar lidt om duplicateMovieClip hvordan man gør og sådan noget. add x oppe der hvor man skal skrive New name er det bare noget man skal eller er det fordi der er noget i flashen der hedder add x???
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
Nej, det er ikke positionerne! Metoden duplicateMovieClip skal have tre ting at vide (den tager altså 3 parametre). For det første skal den naturligvis have at vide, hvilket movie clip der skal kopieres. For det andet skal den have det nye navn på kopien at vide, og endelig dybden af den nye kopi (dybden svarer til i hvilket lag den nye kopi skal ligge, men hvis du giver to kopier den samme dybde, så vil den sidste overskrive den første). Der kan kun eksistere ét movie clip ved en given dybde, og derfor skal vi naturligvis forøge dybden til sidst, så vi ikke overskriver gamle kopier.
Når der skrives add, så menes der bare, at tallet bagefter add skal konkaneres (\"smeltes\" sammen) med teksten foran. Hvis x=1, så vil den første kopi altså hedde vindue1, den anden vindue2, den tredje vindue3 osv. Tilsvarende vil de have dybden 1,2 og 3. Endelig brugtes skråstregen i Flash 4 til at kendetegne hovedtidslinien. I dit tilfælde tager du altså en kopi af movie clippet vindue, som befinder sig på hovedtidslinien, og placerer også den nye kopi på hovedtidslinien. Hvis din knap også befinder sig på hovedtidslinien, så kan koden skrives:
Her har jeg valgt at bruge plus-tegnet i stedet for add, da det foretrækkes i Flash 5, men selvfølgelig vil det også fungere med add. Endelig forøger jeg x med en ved at skrive x++ (det er meget nemmere end at skrive x = Number(x)+1 ) :)
Din kopi vil forresten starte på præcis samme sted som din skabelon (det movie clip, du kopierede). For at placere din kopi et andet sted, så kan vi f.eks. bruge følgende:
on (release) {
duplicateMovieClip (\"vindue\", \"vindue\"+x, x); // tager en kopi af vindue name = this[\"vindue\"+x]; // opretter en henvisning til kopien name._x = random(550); // placerer kopien vandret name._y = random(400); // placerer kopien lodret x++; // forøger x med 1 }
Her skal du bemærke, at egenskaber altid starter med underscore (du kan se alle egenskaberne ved at gå ind under Actions i en frame, klikke på plus-tegnet og gå ned til Properties)! Hvis vi således havde skrevet name.x = random(550), så ville det være variablen x, der havde fået værdien. Jeg har også tilføjet en variabel, der hedder name. Denne opretter bare en henvisning til vores kopi, sådan at name i første omgang bliver lig med vindue1. I anden omgang bliver den selvfølgelig lig med vindue2 :)
Meget fin forklaring!!! Men hvis jeg må stille dig et spørgersmål som lyder: Mnes jeg sider og øver mig med dette laver jeg en mand der står med en pistol så har jeg lavet så når man trykke musseknappen ned skyder han et skud af. Men når jeg har trykket engang og skude flyver gennem flashen hvis jeg så trykke igen forsvinder skudet. Kan man ikke lave sådan en duplicateMovieClip så man kan skyde flere af ad gangen??? Og hvordan.
Det kommer selvfølgelig an på, hvordan du har lavet skuddet. Hvis du har lavet den inde i din mand (et movie clip), som en animation, så skal det laves om til et movie clip (jeg har brugt instance-navnet bullet).
Start med at placere dit movie clip (giv det instance-navnet skud) ved pistolen. Lad os antage, at han holder armen vandret udstrakt og selvfølgelig holder pistolen i hånden. Hvis vi forestiller os en tændstiksmand, så lad os sige, at han peger vandret mod venstre. Vedhæft følgende til bullet:
Dette gør, at din kugle bevæger sig mod venstre med en konstant fart. Når brugeren trykker på musen, så skal du bare kopiere dette movie clip og placere det ved pistolen. Du kan evt. vedhæfte følgende til frame 1 på hovedtidslinien, hvis vi antager, at bullet og din tænkstiksmand også er på hovedtidslinien:
startX = bullet._x; // der, hvor vi skal starte vores kugle startY = bullet._y; bullet._visible = false; // vi skjuler den oprindelige kugle bDepth = 1; // dybden til kuglen
function createBullet() { duplicateMovieClip (\"bullet\", \"bullet\"+bDepth, bDepth); name = this[\"bullet\"+bDepth]; name._x = startX; name._y = startY; bDepth++; // vi forøger bDepth med 1, så vi ikke overskriver den gamle kugle }
Du kan så f.eks. vedhæfte følgende til bullet:
onClipEvent(mouseDown) { _parent.createBullet(); // vi kalder funktionen createBullet, der laver en ny kugle }
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.