L'inverso non accade.
Però se io nella matrice inverto la posizione dei due ostacoli, accade solo il contrario:
Ecco il codice:
function init(){
initContext("canvas");
//preparazione di figure varie
sfondo=new rect(0,0,WIDTH,HEIGHT,"white");
rettangolo=new rect(0,0,50,50,"red");
ostacolo=new rect(100,200,300,80,"cyan");
ostacolo2=new rect(100,400,300,80,"green");
matrice.push(ostacolo);
matrice.push(ostacolo2);
setInterval(draw,1);
}
Proviamo a invertire l'ordine nella matrice:
function init(){
initContext("canvas");
//preparazione di figure varie
sfondo=new rect(0,0,WIDTH,HEIGHT,"white");
rettangolo=new rect(0,0,50,50,"red");
ostacolo=new rect(100,200,300,80,"cyan");
ostacolo2=new rect(100,400,300,80,"green");
matrice.push(ostacolo2);
matrice.push(ostacolo);
setInterval(draw,1);
}
E rivediamo...
Sì, confermato!
Cerchiamo di spiegare il meccanismo.
Nello scorrere la matrice, il programma analizza dapprima il primo elemento, trova verificata la funzione scavalcaBasso e appone il mobile a ridosso di esso; quindi analizza il secondo elemento e trova verificata la stessa funzione anche in questo, e allora appone il mobile a ridosso di quest'altro, facendogli "magicamente" saltare al di là dell'ostacolo.
Se invece io inizio con l'ultimo elemento dell'array, dopo aver verificato la funzione scavalcaBasso per esso, non vi sono più altri elementi da analizzare, perché l'altro ostacolo è già stato analizzato in precedenza, e allora la cosa funziona.
Come rimediare?
Nessun commento:
Posta un commento