b = new Array(); //heri holdes b[0] til b[23] var x = 0; for (var i = 0; i < 3; i++) { for (var j = 0; j < 5; j++) b[x++] = i+"_"+j; } for (x = 0; x < 24; x++) { var rand = random(24); var $_temp = b[rand]; b[rand] = b[x]; b[x] = $_temp; }
nu har du et array af b[0]..b[23] med 24 index til de 24 brikker i random rækkefølge...
ja, jeg laver min egen lille random-funktion, der for hvert eneste index forfra bytter det ud med en tilfældig... Den kører arrayet igennem 1 gang og færdig. Flash's indbyggede sort() kører arrayet igennem flere gange for at kunne sortere og man kan så sætte den til at sortere efter (random(3)-1), så det korteste er at skrive:
arrRandom = new Array(); var sortRand = function(a,b) {return random(3)-1); }; arrRandom.sort(sortRand);
Men den er lidt sløv... jeg ville istedet lave en:
Array.prototype.random = function() { var l = this.length; for (i in this) { var r = random(l); var $_temp = this[r]; this[r] = this[i]; this[i] = $_temp; } }
ingenting... $_temp er bare et navn for en midlirtidig variabel... Det mærkelige navn er valgt for at vlære 100% sikker på ikke at overskrive nogle andre variabler andre steder i nogle scripts... sådan en slags standard...
arrRandom = new Array(); for (i=0; i<24; i++) { arrRandom[i] = i; } Array.prototype.fncRandom = function() { var l = this.length; for (i in this) { var r = random(l); var $_temp = this[r]; this[r] = this[i]; this[i] = $_temp; } } trace(arrRandom); trace(arrRandom.length); arrRandom.fncRandom(); trace(arrRandom); trace(arrRandom.length);
b = new Array(); //heri holdes b[0] til b[23] var x = 0; for (var i = 0; i < 6; i++) { for (var j = 0; j < 4; j++) b[x++] = i+"-"+j; } for (x = 0; x < 24; x++) { var rand = random(24); var $_temp = b[rand]; b[rand] = b[x]; b[x] = $_temp; }
undskyld.. det er fordi Array.prototype.fncRandom() dukker op i en for..in - den er nu en del af Array-objektet... den kan skjules med den udokumenterede ASSetPropFlags()... tilføj:
nænej... For array-objektet er nu "forurenet" med denne funktion, og det vil det altid være... det vil alle instanser af array-objekter også være... derfor skal den skjulet... for..in kører derudover også hurtigere end for(;;)
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.