• User

    [Risolto] Assegnazione variabile in differenti momenti

    **Ciao ragazzi del forum, rieccomi qui.
    Ricordate quell'animazione di gara di cavalli che tanto m'ha fatto tribolare?
    Se non vi viene in mente vi faccio un breve sunto: avevo necessità di far muovere dei cavalli sull'asse delle x tramite lettura di file esterno. Una volta che i primi tre cavalli avessero tagliato il traguardo si sarebbe passati al frame successivo nel quale venivano illustrati i vincitori.

    Tutto ok. L'animazione funziona alla grande e questo e' il codice che m'ha permesso di crearla (grazie a voi soprattutto):**

    stop();
    loadVariables("file2.txt",this);
    this.onEnterFrame = function() {
        var traguardo:Number = 720;
        var counter:Number = 0;
        var variabili_array:Array = new Array(this.a, this.b, this.c, this.d, this.e, this.f, this.g, this.h);
        var cavalli_array:Array = new Array(this.f_blu, this.f_giallo, this.f_viola, this.f_verde, this.f_arancio, this.f_rosso, this.f_azzurro, this.f_rosa);
        for (var i:Number = 0; i<cavalli_array.length; i++) {
            //cavalli_array*._x++;
            cavalli_array*._x = cavalli_array*._x+(variabili_array*/200);
            //trace(cavalli_array*);
            //trace(variabili_array*);
            //trace(counter);
            if (cavalli_array*._x>=variabili_array*) {
                cavalli_array*._x = variabili_array*;
                //cavalli_array*.onEnterFrame = null;
            } else if (cavalli_array*._x>=traguardo) {
                counter = counter+1;
                cavalli_array*.onEnterFrame = null;
                if (counter>=3) {
                    //_root.gotoAndStop(2);
                    _root.gotoAndStop("qualificati");
                }
            }
        }
    }
    

    **Ora però un'altra piccola esigenza...:D
    Vorrei che quando i primi 3 cavalli passano il traguardo sulle loro rispettive corsie apparissero (in un campo di testo dinamico ovviamente) le loro rispettive posizioni di arrivo.

    Visto poi, che subito dopo l'arrivo del terzo cavallo l'animazione passa direttamente al frame "qualificati", vorrei che questo avenisse dopo un intervallo di tempo di almeno 3 secondi, in modo da dar tempo di leggere la posizione d'arrivo del terzo classificato.
    **
    **Spero di essere stata chiara.
    Grazie in anticipo.
    Pri
    **


  • User Attivo

    Provo ad aiutarti..

    stop();
    loadVariables("file2.txt",this);
    this.onEnterFrame = function() {
    var traguardo:Number = 720;
    var counter:Number = 0;
    var variabili_array:Array = new Array(this.a, this.b, this.c, this.d, this.e, this.f, this.g, this.h);
    var cavalli_array:Array = new Array(this.f_blu, this.f_giallo, this.f_viola, this.f_verde, this.f_arancio, this.f_rosso, this.f_azzurro, this.f_rosa);
    for (var i:Number = 0; i<cavalli_array.length; i++) {
    //cavalli_array*._x++;
    cavalli_array*._x = cavalli_array*._x+(variabili_array*/200);
    //trace(cavalli_array*);
    //trace(variabili_array*);
    //trace(counter);
    if (cavalli_array*._x>=variabili_array*) {
    cavalli_array*._x = variabili_array*;
    //cavalli_array*.onEnterFrame = null;
    } else if (cavalli_array*._x>=traguardo) {
    classifica(cavalli_array**,counter,cavalli_array.length)
    this.onEnterFrame = undefined*
    }
    }
    }

    classifica = function(target,counter,num_cavalli) {
    counter++;
    target.createTextField("txt_pos",0,5,5,150,24)
    target.txt_pos.autoSize = true
    target.txt_pos.text = "Pos:"+counter
    if(counter>num_cavalli) {
    var secondi_left = setInterval(function() {
    clearInterval(secondi_left)
    _root.gotoAndStop("qualificati"); },3000)
    }
    }


  • Super User

    Ciao Priscilla 🙂

    Il codice diventa così:

    
    stop();
    var id:Number;
    loadVariables("file2.txt",this);
    this.onEnterFrame = function() {
        var traguardo:Number = 720;
        var counter:Number = 0;
        var variabili_array:Array = new Array(this.a, this.b, this.c, this.d, this.e, this.f, this.g, this.h);
        var cavalli_array:Array = new Array(this.f_blu, this.f_giallo, this.f_viola, this.f_verde, this.f_arancio, this.f_rosso, this.f_azzurro, this.f_rosa);
        for (var i:Number = 0; i<cavalli_array.length; i++) {
            //cavalli_array*._x++;
            cavalli_array*._x = cavalli_array*._x+(variabili_array*/200);
            //trace(cavalli_array*);
            //trace(variabili_array*);
            //trace(counter);
            if (cavalli_array*._x>=variabili_array*) {
                cavalli_array*._x = variabili_array*;
                //cavalli_array*.onEnterFrame = null;
            } else if (cavalli_array*._x>=traguardo) {
                counter = counter+1;
                cavalli_array*.onEnterFrame = null;
                if (counter>=3) {
        mostraPosizioni();
                    attesa();
                }
            }
        }
    }
    function mostraPosizioni()
    {
     // quì inserisci il codice per visualizzare i valori nei tuoi campi testo
    }
    function attesa()
    {
     id=setInterval(vai,3000);
    }
    function vai()
    {
     clearInterval(id);
     _root.gotoAndStop("qualificati");
     trace('stop')
    }
    
    

    all' interno della funzione mostraPosizioni meti il codice per visualizzare il testo che vuoi ai campi di testo della posizione finale dei 3 cavalli


  • Super User

    Anche come ha scritto Edo va bene 🙂 , non propriamente educato il codice ma va bene 🙂


  • User Attivo

    flep dimentico sempre di prender esempio dalla tua semantica..
    separare le varie funzioni in modo da poterci tornare a lavorare da diverse partidi codice, è un aspetto da non sottovalutar. nonchè migliora la leggibilità del code stesso. r


  • Super User

    Scusa gli OT Priscilla, intanto tu vai avanti tranquillamente

    @ edo: è importante che entri in questa ottica perchè se vorrai poi ampliare il discorso con le Classi ... è fondamentale 🙂


  • User Attivo

    @Flep said:

    Scusa gli OT Priscilla, intanto tu vai avanti tranquillamente

    @ edo: è importante che entri in questa ottica perchè se vorrai poi ampliare il discorso con le Classi ... è fondamentale 🙂

    spesso dimentico. anche xchè l'istruzione in questo caso non ne farebbe particolare esigenza.


  • Super User

    @edo_flashas said:

    spesso dimentico. anche xchè l'istruzione in questo caso non ne farebbe particolare esigenza.

    Quello che dici è vero, se non che Priscilla ad esempio necessita di implementare un' altra azione o più azioni, a quel punto con la struttura del mio codice ti ritroveresti avantaggiato.


  • User Attivo

    indubbiamente, proprio quello che dicevo due post fa, e dovro' prima o poi abituarmi. Alle volte lo faccio anche un po per guadagnare tiempo. 🙂


  • User

    Grazie ragazzi, pero' nello specifico, premesso che i campi di testo dinamico li ho chiamati "c01", "c02" e così via....

    Che dovrò inserire nella parte:
    function mostraPosizioni()
    {
    // quì inserisci il codice per visualizzare i valori nei tuoi campi testo???
    Scusate l'ignoranza
    Pri


  • Super User

    scrivi _root.c01.text=testo che vuoi


  • User

    Nei campi di testo che dicevo dovra' apparire il numero della posizione del cavallo che ha appena tagliato il traguardo.

    Facendo un esempio pratico:
    vincono i cavalli (in ordine d'arrivo) 3, 5 e 6. Indi per cui nelle rispettive corsie (nei quali per ognuna e' presente un campo di testo dinamico: c01, c02, ecc) dovranno apparire:
    Per il cavallo 3 in corsia 3 (c03) il numero 1°
    Per il cavallo 5 in corsia 5 (c05) il numero 2°
    Per il cavallo 6 in corsia 6 (c06) il numero 3°

    Naturalmente l'ordine d'arrivo cambia ogni volta in base agli altri dati...
    :vaiii:


  • User

    Io avevo cercato di risolvere così:

    stop();
    loadVariables("file.txt",this);
    this.onEnterFrame = function() {
        var traguardo:Number = 755;
        var counter:Number = 0;
        var variabili_array:Array = new Array(this.a, this.b, this.c, this.d, this.e, this.f);
        var cavalli_array:Array = new Array(this.f_blu, this.f_rosso, this.f_verde, this.f_giallo, this.f_viola, this.f_arancio);
        var corsie_array:Array = new Array(this.c01, this.c02, this.c03, this.c04, this.c05, this.c06);
        for (var i:Number = 0; i<cavalli_array.length; i++) {
            //cavalli_array*._x++;
            cavalli_array*._x = cavalli_array*._x+(variabili_array*/200);
            //trace(cavalli_array*);
            //trace(variabili_array*);
            //trace(counter);
            if (cavalli_array*._x>=variabili_array*) {
                cavalli_array*._x = variabili_array*;
                cavalli_array*.onEnterFrame = null;
            } else if (cavalli_array*._x>=traguardo) {
                counter = counter+1;
                cavalli_array*.onEnterFrame = null;
                if (counter==1) {
                    corsie_array*.text = "1°";
                    corsie_array*.onEnterFrame = null;
                }
                if (counter==2) {
                    corsie_array*.text = "2";
                    corsie_array*.onEnterFrame = null;
                }
                if (counter>=3) {
                    corsie_array*.text = "3"
                    corsie_array*.onEnterFrame = null;
                    //_root.gotoAndStop(2);
                    setInterval(3000);
                    _root.gotoAndStop("qualificati");
                }
            }
        }
    }
    

    In questo modo quando il primo cavallo arriva appare sulla sua corsia il numero 1 ma il problema è che quando arriva il secondo prende lui il numero 1 e cede al primo cavallo il numero due! ....:?


  • Super User

    Prova così:

    
    stop();
    var id:Number;
    var arrivi_array:Array=new Array();
    var campi_array:Array=new Array(c01,c02,c03);
    loadVariables("file2.txt",this);
    this.onEnterFrame = function() {
        var traguardo:Number = 720;
        var counter:Number = 0;
        var variabili_array:Array = new Array(this.a, this.b, this.c, this.d, this.e, this.f, this.g, this.h);
        var cavalli_array:Array = new Array(this.f_blu, this.f_giallo, this.f_viola, this.f_verde, this.f_arancio, this.f_rosso, this.f_azzurro, this.f_rosa);
        for (var i:Number = 0; i<cavalli_array.length; i++) {
            //cavalli_array*._x++;
            cavalli_array*._x = cavalli_array*._x+(variabili_array*/200);
            //trace(cavalli_array*);
            //trace(variabili_array*);
            //trace(counter);
            if (cavalli_array*._x>=variabili_array*) {
                cavalli_array*._x = variabili_array*;
                //cavalli_array*.onEnterFrame = null;
            } else if (cavalli_array*._x>=traguardo) 
      {
       cavalli_array*.posizione=cavalli_array*._x;
       arrivi_array.push(cavalli_array*.posizione);
                counter = counter+1;
                cavalli_array*.onEnterFrame = null;
                if (counter>=3) 
       {
        mostraPosizioni();
                    attesa();
                }
            }
        }
    }
    function mostraPosizioni()
    {
     for(var i:Number=0;i<arrivi_array.length;i++)
     {
      c01*.text=arrivi_array*.toString();
     }
    }
    function attesa()
    {
     id=setInterval(vai,3000);
    }
    function vai()
    {
     clearInterval(id);
     _root.gotoAndStop("qualificati");
     trace('stop')
    }
    
    

    controlla campi_array, ho inserito i campi di testo, controlla se le path sono giuste, se sono sulla root va bene.


  • User

    Macello macellissimo! :arrabbiato:
    I cavalli sono 6 Flep. Non ci sto capendo più niente!
    Potresti dare un'occhiata al mio codice e dirmi dove sbaglio?

    stop();
    var id:Number;
    loadVariables("file.txt",this);
    this.onEnterFrame = function() {
        var traguardo:Number = 755;
        var counter:Number = 0;
        var variabili_array:Array = new Array(this.a, this.b, this.c, this.d, this.e, this.f);
        var cavalli_array:Array = new Array(this.f_blu, this.f_rosso, this.f_verde, this.f_giallo, this.f_viola, this.f_arancio);
        var corsie_array:Array = new Array(this.c01, this.c02, this.c03, this.c04, this.c05, this.c06);
        for (var i:Number = 0; i<cavalli_array.length; i++) {
            //cavalli_array*._x++;
            cavalli_array*._x = cavalli_array*._x+(variabili_array*/200);
            //trace(cavalli_array*);
            //trace(variabili_array*);
            //trace(counter);
            if (cavalli_array*._x>=variabili_array*) {
                cavalli_array*._x = variabili_array*;
                cavalli_array*.onEnterFrame = null;
            } else if (cavalli_array*._x>=traguardo) {
                counter = counter+1;
                cavalli_array*.onEnterFrame = null;
                if (counter==1) {
                    corsie_array*.text = "1°";
                    corsie_array*.onEnterFrame = null;
                }
                if (counter==2) {
                    corsie_array*.text = "2";
                    corsie_array*.onEnterFrame = null;
                }
                if (counter>=3) {
                    corsie_array*.text = "3"
                    corsie_array*.onEnterFrame = null;
                    //_root.gotoAndStop(2);
                    //setInterval(3000);
                    //_root.gotoAndStop("qualificati");
                    attesa();
                }
            }
        }
    }
    function attesa() {
        id = setInterval(vai, 3000);
    }
    function vai() {
        clearInterval(id);
        _root.gotoAndStop("qualificati");
        trace('stop');
    }
    

  • User Attivo

    il mio suggerimento prima leggermente imperfetto..:ciauz:

    stop();
    _target_corrente = this
    loadVariables("file2.txt",this);
    _target_corrente.onEnterFrame = function() {
    var traguardo:Number = 720;
    var counter:Number = 0;
    var variabili_array:Array = new Array(this.a, this.b, this.c, this.d, this.e, this.f, this.g, this.h);
    var cavalli_array:Array = new Array(this.f_blu, this.f_giallo, this.f_viola, this.f_verde, this.f_arancio, this.f_rosso, this.f_azzurro, this.f_rosa);
    for (var i:Number = 0; i<cavalli_array.length; i++) {
    //cavalli_array*._x++;
    cavalli_array*._x = cavalli_array*._x+(variabili_array*/200);
    //trace(cavalli_array*);
    //trace(variabili_array*);
    //trace(counter);
    if (cavalli_array*._x>=variabili_array*) {
    cavalli_array*._x = variabili_array*;
    //cavalli_array*.onEnterFrame = null;
    } else if (cavalli_array*._x>=traguardo) {
    **counter = counter+1;
    **classifica(cavalli_array,counter,cavalli_array.length)
    ***}
    }
    }

    classifica = function(target,counter,num_cavalli) {
    target.createTextField("txt_pos",0,5,5,150,24)
    target.txt_pos.autoSize = true
    target.txt_pos.text = "Pos:"+counter
    if(counter>num_cavalli) {
    **_target_corrente **.onEnterFrame = undefined
    var secondi_left = setInterval(function() {
    clearInterval(secondi_left)
    _root.gotoAndStop("qualificati"); },3000)
    }
    }


  • User

    Grazie Edo, ma che fine hanno fatto i miei campi di testo dinamici (c01, c02, c03, c04, c05, c06)?
    Come ho scritto prima, all'arrivo di ogni cavallo sulla sua corsia dovrebbe apparire il suo posto d'arrivo...


  • User Attivo

    @priscilla73 said:

    Grazie Edo, ma che fine hanno fatto i miei campi di testo dinamici (c01, c02, c03, c04, c05, c06)?
    Come ho scritto prima, all'arrivo di ogni cavallo sulla sua corsia dovrebbe apparire il suo posto d'arrivo...

    se noti nella funzione classifica vado a creare una textField in tutti gli opportuni cavalli al raggiungimento del traguardo di ciascuno.
    associando il contenuto di Pos: 1 etc.... se questo non è il tuo obbiettivo avendo già i campi di testo potresti passare nella funizione classifica una variabile I in modo da popolare in base al suo valure il campo di testo rispettivo..

    es:

    stop();
    _target_corrente = this
    loadVariables("file2.txt",this);
    _target_corrente.onEnterFrame = function() {
    var traguardo:Number = 720;
    var counter:Number = 0;
    var variabili_array:Array = new Array(this.a, this.b, this.c, this.d, this.e, this.f, this.g, this.h);
    var cavalli_array:Array = new Array(this.f_blu, this.f_giallo, this.f_viola, this.f_verde, this.f_arancio, this.f_rosso, this.f_azzurro, this.f_rosa);
    for (var i:Number = 0; i<cavalli_array.length; i++) {
    //cavalli_array*._x++;
    cavalli_array*._x = cavalli_array*._x+(variabili_array*/200);
    //trace(cavalli_array*);
    //trace(variabili_array*);
    //trace(counter);
    if (cavalli_array*._x>=variabili_array*) {
    cavalli_array*._x = variabili_array*;
    //cavalli_array*.onEnterFrame = null;
    } else if (cavalli_array*._x>=traguardo) {
    **counter = counter+1;
    **classifica(cavalli_array,counter,cavalli_array.length,i)
    ***}
    }
    }

    classifica = function(target,counter,num_cavalli,i) {
    _target_corrente["c0"+(i+1)].text = "Poszione:"+counter
    if(counter>num_cavalli) {
    **_target_corrente **.onEnterFrame = undefined
    var secondi_left = setInterval(function() {
    clearInterval(secondi_left)
    _root.gotoAndStop("qualificati"); },3000)
    }
    }


  • Super User

    Priscilla, ho guardato il tuo codice ma non stai utilizzando gli arrays che ti ho inserito... ti complichi troppo la vita come fai tu...


  • User

    Si! così ottengo più o meno lo stesso risultato che ho ottenuto io col mio script. Il problema penso sia proprio nel counter.
    Praticamente quando un cavallo arriva a destinazione si ferma e il counter non lo calcola piu'. In questo modo pure la posizione verrà sbagliata.
    Succede, infatti, che il primo arriva e' si piglia il numero 1 poi arriva il secondo e se lo piglia lui e cede al primo cavallo l'1! Il terzo cavallo, poi, ancora peggio, si piglia l'1 pure lui!