• User

    muovere singole clip nel tempo attraverso variabili esterne

    Salve a tutti! 🙂
    Sono nuova di queste parti ma è un bel po' che mi diverto con Flash. Premetto che sono un grafica e raramente mi sono cimentata nella compilazione di actionscript ma ora ne ho proprio bisogno. :mmm:
    Sto impazzendo cercando una soluzione che forse solo voi potete darmi.
    Praticamente ho realizzato un filmato flash che prende variabili dall'esterno. E fin qui tutto ok. Il problema è usare queste variabili per muovere delle figure sul mio movie. :bho:
    E' una corsa di cavalli nella quale chi ha il punteggio piu' alto va in testa e gli altri 5 restano indietro a seconda del loro punteggio. Non so di preciso come muoverli ma sono arrivata alla conclusione che, forse, è meglio lasciarli partire tutti insieme e fermarne l'animazione dopo un tot di secondi col comando setInterval o setTimeout. Il tempo, naturalmente lo dovrebbe decidere la variabile caricata dall'esterno... :arrabbiato:
    Avete un'idea su come possa fare?

    Grazie in anticipo
    Priscilla


  • Super User

    Ciao priscilla73 e benvenuta nella sezione Flash 🙂

    Le variabili che carichi in Flash, le carichi una volta sola ?

    Perchè se le carichi una volta sola, basterebbe dire alla X di ogni cavallo:
    cavallo_0._x+=valore_variabile_0;
    cavallo_1._x+=valore_variabile_1;
    cavallo_2._x+=valore_variabile_2;
    cavallo_3._x+=valore_variabile_3;
    cavallo_4._x+=valore_variabile_4;
    cavallo_5._x+=valore_variabile_5;


  • User

    Davvero è così semplice? Che figata! Ora provo subito!
    Le variabili le carico una volta al giorno. Si aggiornerebbero ogni volta che si acceda al filmato flash?

    Grazie tante cmq! Gentilissimo! :vai:


  • User

    :arrabbiato: Mannaggia! Non è quello che volevo. O meglio non è proprio questo.
    Si dovrebbe infatti vedere l'animazione del cavallo dalla partenza fino al punto x.
    Inoltre, una volta che i primi 3 taglieranno il traguardo, l'animazione dovrebbe passare a un quadro che rappresenta i primi 3 arrivati.

    Si può fare? :mmm:


  • Super User

    Allora puoi fare così:
    inserisci in un array i valori delle variabili che recuperi.
    Inserisci in un array le MovieClips coi cavalli
    Poi apri un ciclo:

    
    for(var i:Number=0i<cavalli_array.length;i++)
    {
     cavalli_array*.onEnterFrame=function()
     {
      cavalli_array*._x++;
      if(cavalli_array*._x>=variabili_array*)
      {
       cavalli_array*._x=variabili_array*;
       cavalli_array*.onEnterFrame=null;
      }
      else if(cavalli_array*._x>=traguardo)
      {
       cavalli_array*.onEnterFrame=null;
       _root.gotoAndPlay(3);
      }
     }
    }
    
    

  • User

    🙂 Ok, grazie Flep!
    Sei mitico. Solo qualche domanda prima di provarci:

    1. con la tua soluzione i cavalli non avrebbero bisogno di un animazione costruita da me sull'asse delle x, giusto?

    2. il codice che mi suggerisci, poi, va inserito sul movieclip o sul frame 2 della timeline?

    3. i cavalli in questo modo partirebbero tutti nello stesso istante oppure devo dargli il tempo di caricarsi con un onclipeventdata?

    4. e' meglio che usi un loadvars o un loadvariables?

    Scusa l'ignoranza...:D
    Grazie
    Pri


  • Super User

    Ciao Priscilla e benvenuta sul forum GT,

    vado in ordine:

    1. no, visto che si spostano cambiando la loro proprieta _x
    2. sul fotogramma
    3. tolto se i 'cavalli' vengono caricati esternamente (non credo), tutti vengono caricati insieme. Basta un preloader iniziale.
    4. loadVars... loadVariables era gia disponibile da flash4. Funziona ancora ma meglio non prendere 'vecchie' abitudine

    😉


  • User

    Grazie per il benvenuto e per l'aiuto Onsitus.
    Giuro che ce la sto mettendo tutta ma siccome per me è la prima volta che uso un array non riesco proprio a capire come assegnarlo ai singoli cavalli.

    Sul primo frame ho inserito:

    stop();
    _root.LoadVars("file.txt");
    _root.nextFrame();

    Col file.txt dovrebbe caricare le variabili ma non capisco come poi reindirizzarle ai singoli cavalli per farli partire....
    😢

    Magari se ti invio l'animazione mi sai dare una mano....

    Grazie tante
    Priscilla


  • User

    Dunque, ho provato a fare qualcosa per conto mio....
    Studiando qualcosa capisco 🙂
    Sul primo frame ho inserito questo codice:

    stop();
    _root.LoadVars("file.txt");
    variabili = new Array (a,b,c,d,e,f);
    cavalli = new Array()
    cavalli[0] = this.f_blu;
    cavalli[1] = this.f_rosso;
    cavalli[2] = this.f_verde;
    cavalli[3] = this.f_giallo;
    cavalli[4] = this.f_viola;
    cavalli[5] = this.f_arancio;
    _root.nextFrame();

    Sul secondo poi:

    for(var i:Number=0i<cavalli_array.length;i++)
    {
    cavalli_array*.onEnterFrame=function()
    {
    cavalli_array*._x++;
    if(cavalli_array*._x>=variabili_array*)
    {
    cavalli_array*._x=variabili_array*;
    cavalli_array*.onEnterFrame=null;
    }
    else if(cavalli_array*._x>=traguardo)
    {
    cavalli_array*.onEnterFrame=null;
    _root.gotoAndPlay(3);
    }
    }
    }

    Però niente. I cavalli non si muovono...😢
    Help!


  • User

    Mi sono dimenticata di allegare il file flash.
    Eccolo

    grazie ancora


  • Super User

    Manca il file.txt 😉


  • Super User

    Partendo degli script postato da te e Flep prova cosi:

    
    stop();
    //myVar = new LoadVars();
    //myVar.LoadVars("file.txt");
    var traguardo:Number = 500;
    var variabili_array:Array = new Array(a, b, c, d, e, f);
    var cavalli_array:Array = new Array(f_blu, f_rosso, f_verde, f_giallo, f_viola, f_arancio);
    //_root.nextFrame();
    for (var i:Number = 0; i<cavalli_array.length; i++) {
     cavalli_array*.onEnterFrame = function() {
      this._x++;
      if (cavalli_array*._x>=variabili_array*) {
       cavalli_array*._x = variabili_array*;
       cavalli_array*.onEnterFrame = null;
      } else if (cavalli_array*._x>=traguardo) {
       cavalli_array*.onEnterFrame = null;
       _root.gotoAndStop(3);
      }
     };
    }
    
    

    L'as va tutto su un fotogramma e gli cavalli devono essere li pure.


  • User

    Grazie tantissimo!
    Ci provo stasera stessa!
    Speriamo bene...

    :ciauz:


  • User

    Buongiorno Onsitus!
    Allora...ho fatto come mi hai detto tu ma ancora non va. Forse sbaglio qualcosa nel caricamento delle variabili. Ora i cavalli partono ma non si fermano! 😄

    Analizzando il dubug variabili del filmato mi sono accorta, infatti, che l'as non riesce a definire le variabili "a,b,c,d,e,f" prima che il ciclo array parta.

    Ho dovuto poi aumentare il frame rate perchè l'animazione dei cavalli era troppo lenta.

    Ti invio l'ultima prova che ho fatto nella speranza di riuscire a capirci qualcosa.

    Ah...un'altra domanda. Flep ha liquidato subito il tentativo di usare le variabili con un setInterval....tu che ne pensi?

    Grazie
    Pri
    :ciauz:


  • Super User

    Prima di continuare deve spiegarmi un cosa che non ho capito.:?

    I cavalli partano tutti alle stesso momento e va bene.

    Poi:

    1. devono avere velocita diverse e si fermano tutti allo stesso punto
      o
    2. devono avere tutti stessa velocita ma si fermano a punti diversi

    :bho:

    PS: riguardo consigli di Flep, personalemente mi fido di lui al 100%. E un actionscripter puro (Flash Developper) mentre io (come piu nel tuo caso) sono della parte del design (Flash Designer). Per quello qualunque script/consigli venando da lui non le metto in dubbio.;)


  • User

    Magari avessero velocità diverse! Mi sembra un po' complicatuccio...no? :mmm:
    Cmq sia, a seconda del punteggio (letto nel file.txt) devono fermarsi più avanti o più indietro. Chi ha il punteggio più alto si fermerà dopo.

    L'ideale sarebbe che il cavallo che avesse il punteggio più alto andasse più veloce e che tutti insieme poi si fermassero nello stesso istante....
    utopia? :arrabbiato:

    Riguardo ai consigli di Flep anch'io non li metto in dubbio. E' che all'inizio della discussione siamo partiti subito con le variabili che assegnavano il valore alla x di ogni cavallo e non abbiamo più riparlato di muoverli fino alla scandenza di un tempo variabile.... :sbonk:

    Anch'io sono una web designer e la programmazione per me è arabo! 😄


  • Super User

    Se vuoi le velocità in base al valore della variabile:
    cavallo.x+=valore_variabile;

    Un consiglio:
    usa un file XML e non un file di testo.


  • Super User

    Per caricare il txt invece:

    
    stop();
    myVar = new LoadVars();
    myVar.load("file.txt");
    myVar.onLoad = function(success) {
     if (success) {
      var traguardo:Number = 50;
      var variabili_array:Array = new Array(this.a, this.b, this.c, this.d, this.e, this.f);
      var cavalli_array:Array = new Array(f_blu, f_rosso, f_verde, f_giallo, f_viola, f_arancio);
      for (var i:Number = 0; i<cavalli_array.length; i++) {
       cavalli_array*.onEnterFrame = function() {
        this._x++;
        if (cavalli_array*._x>=variabili_array*) {
         cavalli_array*._x = variabili_array*;
         cavalli_array*.onEnterFrame = null;
        } else if (cavalli_array*._x>=traguardo) {
         cavalli_array*.onEnterFrame = null;
         _root.gotoAndStop(2);
        }
       };
      }
     }
    };
    
    

  • User

    Grazie tanto ragazzi.
    Siete veramente disponibili!
    🙂


  • User

    Niente da fare...
    Qualcosa non funziona.....
    I cavalli partono ma non si fermano mai!
    Ci dev'essere qualche errore nel ciclo.

    Ho notato che Flep all'inizio inseriva, per far avenzare i cavalli sull'asse delle x, cavalli_array._x++. Ma i cavalli non si muovevano.

    Mentre con Onsitus l'abbiamo sostituito con this._x++ e i cavalli cosi' si muovono ma è come se non recepissero le variabili dal file.txt. :arrabbiato:

    Tutto cio mi perplime...😢