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