Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2000
    Messaggi
    321

    associare random ad array

    ho questo codice:
    -------------
    var mcArr = new Array(1, 2, 3, 4, 5);
    function shuffleArray (a) {
    var n = new Array();
    while (a.length) {
    n.push(a.splice(random(a.length), 1));
    }
    assegna(n);
    }
    function assegna (arrai) {
    for (i=0; i<arrai.length; i++) {
    trace ("devo andare "+arrai[i]);
    }
    }
    shuffleArray(mcArr);
    stop ();
    ----------------
    che mi restituisce un ordine random nell'array mcArr di numeri dall'1 al cinque ad es:
    5, 2, 3, 1, 4
    ora dovrei associare questi numeri anche ad un'altra matrice tipo:
    var mcRisPosY = new Array(236, 260, 284, 308, 332);
    ma con la stessa randomizzazione... nel senso che se "mcArr" è randomizzato in:
    1,3,4,2,5
    anche l'altra matrice cioè "mcRisPosY" dovrebbe assumere lo stesso ordine quindi dovrebbe risultare
    236,284,308,260,332

    ho provato con:
    ----------------
    var mcArr = new Array(1, 2, 3, 4, 5);
    var mcRisPosY = new Array(236, 260, 284, 308, 332);
    function shuffleArray (a) {
    var n = new Array();
    while (a.length) {
    n.push(a.splice(random(a.length), 1));
    }
    assegna(n);
    }
    function assegna (arrai) {
    for (i=0; i<arrai.length; i++) {
    trace ("devo andare "+arrai[i]);
    }
    }
    shuffleArray(mcArr);
    shuffleArray(mcRisPosY);
    stop ();
    -------------------
    le righe aggiunte in rosso speravo fossero la soluzione
    ma il risultato è che mi fa 2 ordini di randomizzazione diversi per matrice e non corrispondono...

    come posso fare per farli corrispondere cioè fare in modo che lo stesso ordine random valga per tutte e due le matrici??

    grazie ancora a tutti

  2. #2
    Praticamente non dovresti leggere gli indici di mcRisPosY nell'ordine dato da mcArr?
    Nel caso, la soluzione mi sembra di una facilità imbarazzante

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2000
    Messaggi
    321
    Praticamente non dovresti leggere gli indici di mcRisPosY nell'ordine dato da mcArr?
    sarà anche imbarazzante... avrò anche un colpo di "becchisia" ma mi sono... ehm perso...

    comunque non capisco cosa intendi...

    col codice che ho postato ho i due indici con una randomizzazione "diversa" mentre mi occorre che assumano lo stesso ordine tutto li... ma come detto sia con:

    shuffleArray(mcArr);
    shuffleArray(mcRisPosY);

    sia con

    shuffleArray(mcArr,mcRisPosY);

    non funziona o perlomeno nel primo caso ho ordinamenti diversi, mentre nel secondo caso mi ordina solo mcArr e non restituisce nulla in mcRisPosY

    ti dispiacerebbe darmi una dritta in merito?

    grazie

  4. #4
    Azz, pensavo che avessi capito da te avendoti posto il problema in maniera differente

    Comunque se ho capito bene dovresti fare

    mcArr = new array(1,4,2,5,3) // questa te la fai random ma non è un problema se ho capito bene

    poi fai
    codice:
    mcRisPosYsh = new Array() //nuova array che sarà quella che ti serve shufflata
    
    for (i=0;i<mcArr.length;i++){
      indice=mcArr[i]
      mcRisPosYsh.push(mcRisPosY[indice])
    }
    Dico una vaccata?

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2000
    Messaggi
    321
    Originariamente inviato da Stan
    Azz, pensavo che avessi capito da te avendoti posto il problema in maniera differente

    Comunque se ho capito bene dovresti fare

    mcArr = new array(1,4,2,5,3) // questa te la fai random ma non è un problema se ho capito bene
    si questa tramite la funzione:
    codice:
    function shuffleArray (a) { 
    var n = new Array(); 
    while (a.length) { 
    n.push(a.splice(random(a.length), 1)); 
    }
    poi fai
    codice:
    mcRisPosYsh = new Array() //nuova array che sarà quella che ti serve shufflata
    
    for (i=0;i<mcArr.length;i++){
      indice=mcArr[i]
      mcRisPosYsh.push(mcRisPosY[indice])
    }
    perchè un'altro ciclo for e un nuovo indice?
    tramite la riga:
    codice:
    shuffleArray(mcArr);
    o la riga
    codice:
    shuffleArray(mcRisPosY);
    ottengo già la randomizzazione dei due indici ma non corrispondono mentre vorrei con un unico comando sincronizzare i due indici allo stesso shuffle
    Dico una vaccata?
    non lo so non ho capito bene bene bene

    grazie della pazienza

  6. #6
    Ehm....forse no ho capito io

    all'inizio hai

    ArrPrimario = new Array(1,2,3,4,5)
    ArrSecondario = new Array(a,b,c,d,e)

    poi tramite la funzione shuffle ti ritrovi
    ArrPrimario con i valori spostati tipo [3,4,1,2,5]

    Ora per rispostare allo stesso modo l'array secondario non basta sempclimente leggerlo con gli indici di ArrPrimario, e riscriverlo in sequenza? Basta metterci un -1 davanti

    for (i=0;i<ArrPrimario.length;i++){
    indice=ArrPrimario[i]-1
    ArrNuovo.push(arrSecondario[indice])
    }

    primo ciclo

    indice = 3-1 (quindi 2)
    ArrSecondario[indice] estrae "c"

    secondo ciclo
    indice = 4-1 (quindi 3)
    ArrSecondario[indice] estrae "d"

    terzo ciclo
    indice = 1-1 (quindi 0
    ArrSecondario[indice] estrae "a"

    e via dicendo

    alla fine hai stampato
    c
    d
    a
    b
    e
    basta metterli in sequenza su un nuovo array

    Tu dici perchè? Perchè mi è sembrata la cosa più semplice senza che andassi a studiare tutto quello che hai fatto

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2000
    Messaggi
    321
    vabbè...è un tot che non prendo a mano actionscript e mi semto un po pirla....

    riepilogando:
    codice:
    var mcArr = new Array(1, 2, 3, 4, 5);
    var mcRisPosY = new Array(236, 260, 284, 308, 332);
    function shuffleArray (a) {
        var n = new Array();
        while (a.length) {
            n.push(a.splice(random(a.length), 1));
        }
        assegna(n);
    }
    function assegna (arrai) {
        for (i=0; i<arrai.length; i++) {
            trace ("devo andare "+arrai[i]);
            _root["dom"+Number(i+1)].gotoAndStop(arrai[i]);
        }
    }
    shuffleArray(mcArr);
    stop ();
    questo è il codice presente che mi genera in random l'indice mcArr poi con _root ecc. ecc. faccio andare le rispettive mc al fotogramma dei valori dell'indice

    tu mi dici di inserire questo codice
    codice:
    for (i=0; i<mcArr.length; i++) {
        indice = mcArr[i]-1;
        ArrNuovo.push(mcRisPosY[indice]);
    }
    ma sinceramente non capisco più dove inserirlo e come traccio i valori di mcRisPosY...

    scusa stan ma sono un po perso e come detto è molto tempo che non "ciappino" con as ma ho fatto tutt'altro per mesi e adesso mi sento un po in defaiances...

    grazie ancora

  8. #8
    Dopo che hai fatto lo shuffle del primo array, metti quel codice per avere lo stesso ordine sul nuovo array. Da quello che vedo quindi direi per ultimo, sopra o sotto lo stop()

    A questo punto comunque credo di non avere capito io... :master:

  9. #9
    Utente di HTML.it
    Registrato dal
    Jul 2000
    Messaggi
    321
    mmm non funziona... ne prima ne dopo lo stop... o perlomeno sono sicuramente io pirla...

    non capisco però perchè la funzione shufflearray non funzioni contemporaneamente per i due indici...

  10. #10
    Ho controllato la funzione, dopo che opera la matrice originale non esiste più, e restituisce degli oggetti all'interno degli indici......

    così dovrebbe andare, modifica la funzione assegna (mcArr2 è la seconda matrice)

    codice:
    function assegna (arrai) {
    	for (i=0; i<arrai.length; i++) {
    		indice = arrai[i].toString() -1 
    		trace ("devo andare "+arrai[i]);
    		trace ("devo andare "+mcArr2[indice])		
    	}
    }

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.