JavascriptProva

giovedì 7 febbraio 2013

Rilevamento della direzione della sovrapposizione di oggetti.

Ecco le due funzioni che rilevano la sovrapposizione verticale e orizzontale, e la loro sintesi:

function horOver(oggHi,oggLo,ost){
 if(oggLo>=alto(ost) && oggHi<=basso(ost)) return true;
}

function vertOver(oggSx, oggDx, ost){
 if(oggDx>=sinistro(ost) && oggSx <destro(ost)) return true;
}

function Over(oggHi,oggLo,oggSx,oggDx,ost){
 if(horOver(oggHi,oggLo,ost) && vertOver(oggSx,oggDx,ost)) return true;
}
Ed eccone l'applicazione, che rileva quando l'oggetto si sovrappone all'ostacolo:
function OnMouseMove(){
 oggetto.style.left=BaseX+event.clientX-MouseX;
 oggetto.style.top=BaseY+event.clientY-MouseY;
 
 
 if (Over(alto(oggetto),basso(oggetto),sinistro(oggetto),destro(oggetto),ostacolo)){
  $("test").innerHTML="sovrapposto";
 }else{
  $("test").innerHTML=" ";
 }
}
Testata, funziona alla perfezione.

Ora bisogna scrivere funzioni che rilevino la direzione della sovrapposizione...
Cerco di ricordare...

Il principio è rilevare la precedente posizione dell'oggetto, quindi una volta effettuato lo spostamento rilevare la posizione attuale dell'oggetto e fare il confronto.

Dichiaro le variabili che ospiteranno le coordinate prima del movimento.
var prevSx,prevDx,prevHi,prevLo;
E poi le pongo prima del movimento a ricevere i valori. Iniziamo solo con quelle orizzontali...
function OnMouseMove(){
 prevSx=sinistro(oggetto);
 prevDx=destro(oggetto);
 
 oggetto.style.left=BaseX+event.clientX-MouseX;
Aggiungo successivamente un codice che se l'oggetto si sovrappone all'ostacolo, se il precedente margine destro era inferiore o uguale al margine sinistro dell'ostacolo, ossia se l'oggetto va a sovrapporsi all'ostacolo da sinistra, scrive nella casella-test "da sinistra", mentre se il precedente margine sinistro dell'oggetto è superiore al margine destro dell'ostacolo, ossia se l'oggetto va a sovrapporsi all'ostacolo da destra scrive nella casella-test "da destra".
function OnMouseMove(){
 prevSx=sinistro(oggetto);
 prevDx=destro(oggetto);
 
 oggetto.style.left=BaseX+event.clientX-MouseX;
 
 if(Over(alto(oggetto),basso(oggetto),sinistro(oggetto),destro(oggetto),ostacolo)){
  if(prevDx<=sinistro(ostacolo)) $("test").innerHTML="da sinistra";
  if(prevSx>=destro(ostacolo)) $("test").innerHTML="da destra";
 }
 
 oggetto.style.top=BaseY+event.clientY-MouseY; 
}
Funziona benissimo! Ho rilevato se l'oggetto si sovrappone all'ostacolo da sinistra o da destra!

Nessun commento:

Posta un commento