Devo dividere la funzione OnMouseMove in diverse sezioni:
c'è una sezione in cui si possono leggere le impostazioni sullo stato precedente, quindi l'atto del movimento dell'oggetto e una sezione successiva in cui viene rilevato il nuovo stato dell'oggetto, prendendo eventualmente le impostazioni precedenti.
Primo esercizio:
Prima del movimento si deve rilevare se l'oggetto si trova in posizione orizzontale rispetto all'ostacolo o in posizione verticale. Nel primo caso verrà fissato attaccato all'ostacolo sulla sinistra, nel secondo attaccato all'ostacolo in alto.
Proviamo...
Ho avuto una qualche difficoltà in relazione alla nomenclatura delle funzioni che ho già creato.
La funzione overHor, secondo il nome, dovrebbe esprimere la sovrapposizione orizzontale, ma in realtà è positiva, per come l'ho scritta, solo se l'oggetto si trova sulla verticale dell'ostacolo, e non sull'orizzontale.
Reciprocamente, overVert secondo il nome, dovrebbe esprimere la sovrapposizione verticale, ma risulta positiva solo se l'oggetto si trova sull'orizzontale dell'ostacolo.
Sostituisco la nomenclatura delle due funzioni, altrimenti la cosa è fonte di confusione:
//funzione overHor: è positiva se l'oggetto si trova sull'orizzontale dell'ostacolo function overHor(){ if(basso(oggetto)>alto(ostacolo) && alto(oggetto)<basso(ostacolo)){ return true; }else{ return false; } } //funzione overVert: è positiva se l'oggetto si trova sulla verticale dell'ostacolo function overVert(){ if(destro(oggetto)>sinistro(ostacolo) && sinistro(oggetto)<destro(ostacolo)){ return true; }else{ return false; } }Ecco, così va meglio...
Ora scrivo la funzione OnMouseMove con le sue sezioni: una sezione in cui si legge lo stato precedente, una in cui si effettua il movimento e una successiva in cui si prendono decisioni in relazione al raffronto fra lo stato precedente e lo stato successivo al movimento.
function OnMouseMove(){ $("testo").innerHTML=overHor()+" "+overlap(); //sezione di lettura stato precedente stato=overHor(); oggetto.style.left=(event.clientX-spiazzamentoX)+"px"; //sezione decisioni if(overlap()) { if(stato==true) oggetto.style.left=(sinistro(ostacolo)-larghezza(oggetto))+"px"; } oggetto.style.top=(event.clientY-spiazzamentoY)+"px"; }E così funziona: ossia se l'oggetto, prima di impattare con l'ostacolo, si trova sulla sua "banda" orizzontale, viene attaccato all'ostacolo sulla sinistra.
Nessun commento:
Posta un commento