- Home
- Categorie
- Digital Marketing
- Grafica, Visual Design & UX
- muovere singole clip nel tempo attraverso variabili esterne
-
si va bene, poi apri un ciclo e segui lo script
-
Ho seguito pari pari lo script di Onsitus ma niente! I cavalli si muovono tutti allo stesso tempo senza fermarsi... Non caricano le variabili? Oppure le variabili non vengono assegnate alle singole clip dei cavalli?
Voglio morì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);
}
};
}
}
};
-
Non si fermano perchè la variabile traguardo la dichiari all' interno della funzione onLoad e quindi diventa una variabile locale, cioè finito onLoad lei sparisce, Flash ne cancella memoria.
Per cui, dichiara quella variabile all' inizio dello script. subito dopo il comando stop()
-
Niente da fare.... Neanche così i cavalli si fermano....
Forse è il comando "this._x++;" ad essere sbagliato?
Ma se inserisco " cavalli_array*._x++" non si muovono neanche a pagarli!stop();
var traguardo:Number = 50;
myVar = new LoadVars();
myVar.load("file.txt");
myVar.onLoad = function(success) {
if (success) {
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);
}
};
}
}
};
-
Quello script è diventato un macello...
Devi fare dei trace() , fai delle prove con i trace() e guarda se ci sono dei valori che risultano undefined.
-
Un macello si! E' la stessa cosa che dico ogni volta che apro i cassetti in camera mia....ma almeno lì so come fare per rimettere in ordine....
Grazie Flep...
-
ok. Ho inserito un:
trace(variabili_array*);
e un:
trace(cavalli_array*);Il debug mi restituisce sempre undefined.....
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() {
trace(variabili_array);
trace(cavalli_array);**
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);
}
};
}
}
};
-
Mi è venuto un dubbio....
Non è che devo definire pure i limiti dello schermo sul quale muoversi??
-
Ecco! inserendo un trace alle due variabili (cavalli_array e variabili_array) prima del cavalli_array*.onEnterFrame = function()
mi sono accorta che mi restituisce i giusti valori; i nomi dei cavalli e le variabili caricate. Quindi c'e' qualcosa che non va nella funzione....Ma cosaaaaaaaaa?
-
senza if e esle if i cavalli si muovono ?
-
si muovono grazie al comando this._x++;
-
Allora,
all'inizio del ciclo, scrivi cavalli_array*.id=i;Poi if e else if diventano così:
if (this._x>=variabili_array[this.id]) {
this._x = variabili_array[this.id];
this.onEnterFrame = null;
} else if (this._x>=traguardo) {
this.onEnterFrame = null;
_root.gotoAndStop(2);
-
Ci sono!!!!
**
l'istruzione:**
cavalli_array*.onEnterFrame = function() {va cambiata in this.onEnterFrame = function() e posizionata prima delle:
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);Yessssssss
Ora l'unico problema rimane che il filmato deve passare al secondo frame solo dopo che i primi passano il traguardo e non solo il primo.
Cmq, grazie Flep! grazie Onsitus
E scusate per la rottura di scatole!Pri
-
Col metodo LoadVars non riuscivo a caricare le variabili della posizione dei cavalli.
Alla fine il buon vecchio loadVariables mi ha salvato la vita!!Un'altra cosa Flep. Mi dicevi che per far aumentare la velocità al cavallo con il punteggio più alto sarebbe bastato inserire al posto di:
cavalli_array*._x++
questo codice:
cavalli_array*._x+=variabili_array*;Ma non va bene così. La variabile della posizione, infatti, rappresenta solo il numero sul quale si dovrà fermare il cavallo una volta arrivato.
Forse però se facessi una proporzione tra il punteggio massimo e il numero dei cavalli.....
-
Ed ecco il codice giusto!
Spero possa essere d'aiuto a chi come me si è trovata di fronte a questo problema:stop();
loadVariables("file.txt",this);
this.onEnterFrame = function() {
var traguardo:Number = 750;
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);
for (var i:Number = 0; i<cavalli_array.length; i++) {
//cavalli_array*._x++;
cavalli_array*._x = cavalli_array*._x + (variabili_array*/600);
//trace(cavalli_array*);
//trace(variabili_array*);
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);
}
}
};
Pri
-
Dimenticavo...
Manca ancora l'istruzione che invia al secondo frame solo dopo che almeno 3 cavalli abbiamo raggiunto l'obiettivo...Vabbé...non credo manchi molto...vero Flep? vero Onsitus?
Ancora grazie...
Pri
-
@priscilla73 said:
Dimenticavo...
Manca ancora l'istruzione che invia al secondo frame solo dopo che almeno 3 cavalli abbiamo raggiunto l'obiettivo...Sara perche il traguardo e di 750, posizione a quale nessun cavallo arriva.:bho:
-
Crei un' altra variabile numerica all' inizio:
var counter:Number=0;poi ogni volta che un cavallo supera il traguardo aumenti di 1 counter e controlli se è = 3 fai eseguire
-
Grazie Flep!
Non sono riuscita a fare proprio come dicevi tu ma il risultato penso che sia piu' o meno lo stesso.
Ho inserito il la variabile counter, come puoi vedere, ma ho dovuto assegnargli il valore 1.
Non so bene perchè ma ad un certo punto del loop, credo, il comando:
cavalli_array*.onEnterFrame = null
annulla praticamente l'aggiunta di +1 alla variabile counter che cosi riparte da dalla somma precedente.
Ho ovviato facendo partire il counter da 1 e non dandogli così il tempo di diminuire ma credo di sia una sporcatura. Credo che se i cavalli avessero punteggi molto distanti tra loro (tipo 1600, 1000 e 800) a quel punto la mia soluzione non funzionerebbe, perchè il counter avrebbe tutto il tempo di diminuire....stop();
loadVariables("file.txt",this);
this.onEnterFrame = function() {
var traguardo:Number = 700;
var counter:Number = 1;
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);
for (var i:Number = 0; i<cavalli_array.length; i++) {
//cavalli_array*._x++;
cavalli_array*._x = cavalli_array*._x + (variabili_array*/300);
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;
//_root.gotoAndStop(2);
} else if (counter>=3) {
_root.gotoAndStop(2);
}
}
}
-
metti
if(counter>=3)
all' interno dell' esle if, dopo che fermi l'onEnterFrame