Avatar billede elnino Nybegynder
24. april 2001 - 20:34 Der er 7 kommentarer og
1 løsning

duplicate movie med variable navn


Jeg er ved at lave et spil hvor et rumskib skyder et skud afsted hvergang der bliver trykket space. Det virker også fint så længe man kun kan skyde et skud af gangen. Når jeg have at den skal skyde hver gang men trykker space, bruger jeg duplicate movie. Mit problem er hvordan jeg tildele det nye movieclip et instance name via en variable.

I min første fram definere jeg

i=1

spillet går videre og spiller i andet frame, hvor jeg har skrevet

on (keyPress \"<Space>\") {
    _root.skud.duplicateMovieClip (eval(\"skud\" i), 1);
    skud (i)._X = ship (i)._X;
    skud (i)._y = ship (i)._y;
    skud (i).play(\"2\");
        i=i+1;
}

hvor skud er den film der skal dublikeres, ship, er der hvor den skal spille fra og i er variabelnavnet. Jeg ved godt der er forkert, men hvordan er syntaksen for at tildele mc\'en skud en ny variablenavn så de alle får forskellige navne.

Skal jeg bruge eval commandoen...

håber i kna hjælpe
Avatar billede nikolajdu Nybegynder
24. april 2001 - 22:53 #1
Prøv at bruge den her.

Den styrer \"ship\" til venstre og Højre og sætter \"_skud[ii]\" X offset til skibet´s position.

onClipEvent (keyDown) {
    if (Key.getCode()==Key.RIGHT) {
        _root.skibx = getProperty (_root.ship,_x);
        setProperty (\"_root.ship\", _x, getProperty (_root.ship, _x)+5);
    } else if (Key.getCode()==Key.LEFT) {
        _root.skibx = getProperty (_root.ship,_x);
        setProperty (\"_root.ship\", _x, getProperty (_root.ship, _x)-5);
    } else if (Key.getCode() == Key.SPACE) {
        hvilketNr = \"ii\";
        duplicateMovieClip (_root.skud[ii], skud[ii], ii);
        setProperty (skud[ii], _x, _root.ship._x);
        _root.skud[ii].gotoAndPlay(2);
        _root.tjeckI = \"skud\"+ii;
        ii++;
    }
}
Avatar billede nikolajdu Nybegynder
24. april 2001 - 22:54 #2
Eller indsæt den her på dit \"skud\" movieClip

onClipEvent (keyDown) {
    if (Key.getCode() == Key.SPACE) {
        hvilketNr = \"ii\";
        duplicateMovieClip (_root.skud[ii], skud[ii], ii);
        setProperty (skud[ii], _x, _root.ship._x);
        _root.skud[ii].gotoAndPlay(2);
        _root.tjeckI = \"skud\"+ii;
        ii++;
    }
}
Avatar billede elnino Nybegynder
26. april 2001 - 13:21 #3
Jeg har ikke haft tid til at kigge på det endnu - desvære. Glæder mig og vender tilbage hurtigst muligt

/
Elnino
Avatar billede nikolajdu Nybegynder
26. april 2001 - 13:35 #4
oki doki :-)
Avatar billede elnino Nybegynder
29. april 2001 - 21:57 #5
Så er jeg tilbage igen.
Jeg har lært syntaksen og prøvet at skive det her ind. Efter min forståles burde det virke men det gør det bare ikke:

on (keyPress \"<Space>\") {
_root.skud.duplicateMovieClip(\"skud\"+i, i);
    [\"skud\"+i]._X = _root.ship._X;
    [\"skud\"+i]._y = _root.ship._y;
    [\"skud\"+i].play(\"2\");
    i+= 1;
}

Jeg syndes det virker lidt mere intuitivet at skrive det sådan - burde det ikke kunne lade sig gøre...?
Jeg har lidt svært ved at forstå dit forslag -
hvad er hvilketNr variablen og den tjek du laver til sidst?
Avatar billede nikolajdu Nybegynder
29. april 2001 - 22:11 #6
Et par ting.

Det hedder ikke [\"skud\"+i], men skud[ii] - Det kalder en array indeholdende MovieClip kaldet skud+nummeret.

Du skriver stadig forkert i dit taste tjeck.

Du kan ikke skrive play(\"2\"); - Play afspiller og indeholder ikke noget parameter. Hvis du vil bruge parameter skal du bruge gotoAndPlay(\"2\"); - Her gåes til en frameLabel med navnet 2. Hvis du vil gå til en frame uden label skal du skrive gotoAndPlay(2);

Prøv den her.

onClipEvent (keyDown) {
    if (Key.getCode() == Key.SPACE) {
        duplicateMovieClip (_root.skud[ii], skud[ii], ii);
        skud[ii]._x = _root.ship._x;
        skud[ii]._y = _root.ship._y;
        skud[ii].gotoAndPlay(2);
        ii++;
    }
}

/Nikolaj
Avatar billede elnino Nybegynder
29. april 2001 - 22:42 #7
Jeg har prøvet og det virker ikke. Men mit MC der skal dublikeres hedder heller ikke _root.skud[ii],
det hedder kun _root.skud? Men hvis jeg fjerner [ii] her, går den ind i en uendelig lykke og bliver ved med at åvne vinduer...
Så har jeg sat ii=1 i min første fram...?
Har du noget forslag?

Avatar billede elnino Nybegynder
30. april 2001 - 14:01 #8
Jeg har fået lavet noget der virker, det er måske ikke den smartest måde, men jeg har selv forstået den.

on (keyPress \"<Space>\") {
  ship_x = getProperty(\"_root.ship\", _x);
  ship_y = getProperty(\"_root.ship\", _y);
  _root.laser.duplicateMovieClip(\"laser\"+n, n);
  setProperty (_root[\"laser\"+n], _x, ship_x);
  setProperty (_root[\"laser\"+n], _y, ship_y);
    n += 1;
}

Men jeg vil give dig pointene fordi spørgsmølet drejede sig om at tilskrive et instance et nyt variabel navn og det gav du jo svar på...
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