JavascriptProva

martedì 1 gennaio 2013

Esperimenti sulle collisioni

Ecco, adesso potrei approfittare dei diversi pattern di vero e falso delle due funzioni per decidere il comportamento dell'oggetto nelle diverse posizioni in cui impatta l'ostacolo.
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