Avatar billede taamas Nybegynder
17. november 2001 - 10:03 Der 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???
Avatar billede egede Nybegynder
17. november 2001 - 10:16 #1
Jeg har ikke den store forstand på DuplicateMovieClip men jeg tror at de to x\'er er x og y-værdien.. altså det sted hvor kopien skal være....
Avatar billede gotcha Nybegynder
17. november 2001 - 10:34 #2
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:

on (release) {

  duplicateMovieClip (\"vindue\", \"vindue\"+x, x);
  x++;
}

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 ) :)

Mvh Morten
Avatar billede gotcha Nybegynder
17. november 2001 - 10:42 #3
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 :)
Avatar billede taamas Nybegynder
17. november 2001 - 10:54 #4
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.
Avatar billede gotcha Nybegynder
17. november 2001 - 11:24 #5
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:

onClipEvent(load) {
  velX = -4;
}
onClipEvent(enterFrame) {
  _x += velX;
}

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
}

Mvh Morten
Avatar billede taamas Nybegynder
17. november 2001 - 11:44 #6
Okaj du fortjener pointne
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