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