Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    Posizionare 100 mc in una griglia

    Salve a tutti...
    Avrei un problemino che il mio cervello non vuole riuscire a risolvere: dovrei posizionare 100 clip filmato in una griglia 10x10, in maniera casuale.
    Abbiamo mc1, mc2, mc3...,mc100.
    Credo di dover creare un ciclo con all'interno l'estrattore casuale, ma qualora il posto fosse già stato assegnato dovrei ripetere l'estrazione... Come posso fare?
    Arrivo dal Visual Basic autodidatta, e l'action script ancora lo mastico poco: è possibile numerare le istruzioni per poi richiamarle con un semplice "goto"?...

    Faccio un esempio di quello che ho pensato:

    for (i=1;i=100;i++) {
    10 x=int(math.random()*100)+1

    //se è già uscito si ripete l'estrazione
    //utilizzo una variabile con indice:

    if posizione(x)="occupato" {
    goto 10
    }

    //Se non è uscito metterò il mc(i)
    //a posto e poi bloccherò la variabile
    //mc(i)._x=quel che sarà
    //mc(i)._y=quel che sarà

    posizione(x)="occupato"
    }

    Mi sa che è solo un grande minestrone...
    C'è qualcuno che può aiutarmi?

  2. #2
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,771
    Arrivo dal Visual Basic
    Ah ecco...

    Si, diciamo che il tuo algoritmo (grande minestrone) potrebbe essere una soluzione, anche se non molto ottimale... infatti tu indichi una condizione dove se la posizione è già occupata, allora dovrebbe ripetersi il ciclo fino a trovarne una non occupata...

    Una soluzione migliore è, invece, quella di creare un array con l'indice delle posizioni e man mano eliminare, in modo casuale, le voci di questo array in modo da valutare solo le posizioni rimanenti.

    ...

    Non puoi utilizzare goto per richiamare righe di codice, in quanto non si possono numerare le righe di codice.
    Puoi però utilizzare dei cicli e delle funzioni da poter richiamare.

    Ti consiglio comunque di studiarti le basi dell'ActionScript.
    Molto materiale informativo lo troverai sulla guida stessa di flash.

    ...

    Torniamo al tuo problema.

    Dovrai innanzitutto concatenare un mc (movie clip) per poterlo richiamare da script.

    Come fare:
    1. Una volta creato il tuo mc, quindi, clicca col dx sul relativo simbolo nella libreria
    2. Scegli "concatenamento.." e nella finestra che ti apparirà, seleziona "Esporta per ActionScript"
    3. Dai il nome identificatore, ad es: clip
    4. A questo punto tale simbolo è pronto per essere richiamato da script.


    Seleziona il primo frame della root (livello principale) e inserisci questo script:

    codice:
    // array posizione
    posizione = new Array();
    // posizione del primo clip a sx in alto
    xinit = 10;
    yinit = 10;
    // distanza tra i clip
    dist = 50;
    // ciclo per riempire l'array
    for (id=0; id<100; id++) {
    	posizione[id] = id;
    }
    // ciclo per disporre i clip
    for (id=0; id<100; id++) {
    	// inserisci il clip sullo stage
    	_root.attachMovie("clip", "clip"+id, id);
    	// numero casuale tra le posizioni restanti
    	rnd = random(100-id);
    	// indice riga
    	r = int(posizione[rnd]/10);
    	// indice colonna
    	c = posizione[rnd]-r*10;
    	// posiziona clip
    	_root["clip"+id]._x = xinit+dist*c;
    	_root["clip"+id]._y = yinit+dist*r;
    	// elimina dall'array, la voce relativa alla posizione
    	posizione.splice(rnd, 1);
    }
    I clip verranno disposti nelle posizioni casuali in una griglia 10
    *10 secondo le tre variabili iniziali:

    xinit = 10;
    yinit = 10;
    dist = 50;

    che potrai impostare a tuo piacimento

    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  3. #3
    Wow!
    In effetti è anche molto più "elegante" come soluzione...
    Ti ringrazio moltissimo e domani vedrò di mettere in pratica, anche se già leggendo il tuo codice mi sembra di capire che la teoria è corretta...
    Adesso no perchè con Flash MX c'ho litigato e non ci parlo più, per questa sera...


    Ancora mille grazie!

  4. #4
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,771
    ...non c'è di che!!

    Bisogna prenderci confidenza piano piano
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

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.