Avatar billede soelle Nybegynder
30. maj 2004 - 11:24 Der er 11 kommentarer og
1 løsning

Slette fra Array (2)

Jeg har en kode der sletter ting fra mit array efterhånden som de bliver brugt i filen. Nu er mit problem at den alligevel bruger de samme ting flere gange selvom det ikke er i Array.

Min kode er:

var tegningArray = new Array("ambulance_mc", "ananas_mc", "ettal_mc");

randomtegning = tegningArray[random(tegningArray.length)];

tegning_holder1_mc.attachMovie(randomtegning, randomtegning+"1", 2);

randomtegning = tegningArray[random(tegningArray.length)];
randomTegIndex = random(tegningArray.length);
randomtegning = tegningArray[randomTegIndex];
tegningArray.splice(randomTegIndex, 1);

tegning_holder2_mc.attachMovie(randomtegning,randomtegning+"2",2);

Når jeg tracer mit array kan jeg se at det er rigtigt men min randomtegning bliver alligevel den samme nogen gange, selvom tegningen er væk fra mit Array.
Avatar billede _k Nybegynder
30. maj 2004 - 17:42 #1
Du bruger random(tegningArray.length) 3 forskellige steder. Det giver (nogle gange) forskellige værdier 3 steder, og resulterer i at du får slettet den forkerte værdi i dit array.

Start med at lave en fælles randomvariabel og referer til den når du har behov for det.

mitRandomTal = random(tegningArray.length);


...en anden og mere straightforward måde at opnå det samme på:

var tegningArray = new Array("ambulance_mc", "ananas_mc", "ettal_mc");
tegningArray.sort(function(){return random(3)-1;});

for(x=1;x<4;x++) {
    eval("tegning_holder" + x + "_mc").attachMovie(tegningArray[x - 1],"randomtegning" + x,100 + x);
}
Avatar billede soelle Nybegynder
31. maj 2004 - 00:43 #2
Det virker. Vil du forklare mig hvad scriptet gør?
Avatar billede _k Nybegynder
31. maj 2004 - 10:55 #3
Efter at have lavet et array sortere vi det tilfældigt med sort-funktionen.
I for-løkken gør vi faktisk det samme som du gjorde før med:

tegning_holder1_mc.attachMovie(randomtegning, randomtegning+"1", 2);

I stedet for at skrive næsten det samme 3 gange i træk (eller flere hvis det bliver nødvendigt?) sætter vi det dynamisk ind, så det genererer sig selv. Kig på hvordan x'et går igen der hvor værdierne ændrer sig.
Avatar billede soelle Nybegynder
31. maj 2004 - 16:54 #4
OK! Tak! Det bliver nødvendigt med flere, men jeg prøver om jeg ikke kan finde ud af det. Ellers kan jeg vel kontakte dig igen?!
Avatar billede _k Nybegynder
31. maj 2004 - 21:42 #5
Hvis det er relateret til ovenstående script, så fortsæt bare tråden her.

Tak for point :)
Avatar billede soelle Nybegynder
01. juni 2004 - 08:33 #6
Jeg har lige et lille tillægsspørgsmål. Jeg har en variabel (r) i de movieclips der ligger i tegningArray'et. Jeg vil så gerne have at r bliver lig med noget når man klikker på movieclippet. Hvordan gøres det smartest efter man har brugt dit script?
Avatar billede _k Nybegynder
01. juni 2004 - 09:37 #7
for(x=1;x<4;x++) {
    eval("tegning_holder" + x + "_mc").attachMovie(tegningArray[x - 1],"randomtegning" + x,100 + x);
    eval("tegning_holder" + x + "_mc") = "noget"; // Eller: nogetArray[x - 1], hvis du vil sætte noget fra et array
}
Avatar billede soelle Nybegynder
01. juni 2004 - 09:43 #8
Det virker ikke rigtigt. Jeg har måske ikke formuleret det rigtigt. I den første frame af de movieclips der bliver attach'et har jeg skrevet:
_parent.onRelease =function(){

    r="a";
}
men kan man ikke trække r fra root istedet?
Avatar billede _k Nybegynder
01. juni 2004 - 11:41 #9
Kan du ikke bare kalde:

_root.r="a";

Er ikke med på hvad det er du vil opnå med r? Forklar, forklar...
Avatar billede soelle Nybegynder
02. juni 2004 - 14:14 #10
Jeg vil lave en "if (randomBogstav=r)". randomBogstav har jeg fra et andet array. Det er derfor vigtigt at det først er når man klikker på movieclippet. Jeg har fået det til at virke hvis jeg smider alt koden ind i de forskellige movieclips der er i tegningarray'et, men jeg vil gerne have koden ud i roden fordi det bliver et stort array og derfor meget kode der skal laves til hver.
Avatar billede _k Nybegynder
02. juni 2004 - 16:24 #11
Du kan gøre det på forskellige måder alt efter hvornår du vil eksekvere din if-statement.
Hvis det ikke skal gå ultrahurtigt, kan du assigne indholdet af dit array til en variabel inde i mc'et. Lidt ligesom ovenfor:

for(x=1;x<4;x++) {
    eval("tegning_holder" + x + "_mc").attachMovie(tegningArray[x - 1],"randomtegning" + x,100 + x);
    eval("tegning_holder" + x + "_mc").enVariabelIndeIMCet = etArray[x];
}

Ellers kan du f.eks. inde fra det enkelte mc kalde ud til en funktion med dets instancenavn som parameter:

_root.minFunktionIRoden(this);

...i funktionen kan du så behandle det enkelte mc som fortjent:

function minFunktionIRoden(mcet) {
  mcet._alpha = 50;
}
Avatar billede soelle Nybegynder
03. juni 2004 - 10:53 #12
tror bedst jeg kan gennemskue den sidste løsning. Mit script inde i movieclippet ser således ud:
xv = _parent._x;
yv = _parent._y;
_parent.onMouseDown = function() {
    r = "a";
    this.startDrag();
    if (this.hitTest(_root.bogstav_mc)) {
        this._x = Number(xv);
        this._y = Number(yv);
        if (r == _root.randomBogstav) {
            rigtigt="ja"
            this._x = 100;
            this._y = 100;
            this.stopDrag();
        }
    } else {
        this._x = Number(xv);
        this._y = Number(yv);
    }
};

stop();

Det er så det jeg gerne vil have ud i roden så jeg kan nøjes med min 'rigtigt="a"' i movieclippet. Jeg kan heller ikke få drag til at virker ordentligt. Hvis man ikke rammer hittesten vil jeg gerne have den til at falde tilbage, og det gør den også men den ikke opdager hittesten længere.
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