Innanzitutto, identificare sinistra, destra, alto e basso.
function sinistra(oggetto){ return oggetto.x; } function destra(oggetto){ return oggetto.x+oggetto.w; } function alto(oggetto){ return oggetto.y; } function basso(oggetto){ return oggetto.y+oggetto.h; }
Con queste funzioni, adesso definiamo la posizione relativa di un mobile rispetto a un ostacolo:
function ASinistra(mobile, ostacolo){ if(destra(mobile)<sinistra(ostacolo) && alto(mobile)<basso(ostacolo) && basso(mobile)>alto(ostacolo)) return true; return false; } function ADestra(mobile ostacolo){ if(sinistra(mobile)>destra(ostacolo) && alto(mobile)>basso(ostacolo) && basso(mobile)>alto(ostacolo)) return true; return false; } function InAlto(mobile, ostacolo){ if(basso(mobile)<alto(ostacolo) && destra(mobile)>sinistra(ostacolo) && sinistra(mobile)<destra(ostacolo)) return true; return false; } function InBasso(mobile, ostacolo){ if (alto(mobile)>basso(ostacolo) && destra(mobile)>sinistra(ostacolo) && sinistra(mobile)<destra(ostacolo)) return true; return false; }E adesso facciamo la prova... modificando il codice di OnMouseMove:
function OnMouseMove(evt){ rettangolo.x=evt.pageX; rettangolo.y=evt.pageY; scrivi(InBasso(rettangolo,ost)); }provando via via con InAlto, ADestra, ASinistra, e cambiando ost con ost2 (due diversi ostacoli disegnati sul canvas) funziona tutto!
Alla fine ho fatto tutto, definendo sia le posizioni del mobile, sia le posizioni delm mobile virtuale dato dalla posizione del cursore...
function sinistra(oggetto){ return oggetto.x; } function destra(oggetto){ return oggetto.x+oggetto.w; } function alto(oggetto){ return oggetto.y; } function basso(oggetto){ return oggetto.y+oggetto.h; } //_________________________________________________________________________________________________ function ASinistra(mobile, ostacolo){ if(destra(mobile)<sinistra(ostacolo) && alto(mobile)<basso(ostacolo) && basso(mobile)>alto(ostacolo)) return true; return false; } function ADestra(mobile, ostacolo){ if(sinistra(mobile)>destra(ostacolo) && alto(mobile)<basso(ostacolo) && basso(mobile)>alto(ostacolo)) return true; return false; } function InAlto(mobile, ostacolo){ if(basso(mobile)<alto(ostacolo) && destra(mobile)>sinistra(ostacolo) && sinistra(mobile)<destra(ostacolo)) return true; return false; } function InBasso(mobile, ostacolo){ if (alto(mobile)>basso(ostacolo) && destra(mobile)>sinistra(ostacolo) && sinistra(mobile)<destra(ostacolo)) return true; return false; } //________________________________________________________________________________________________ function sinistraVirtuale(evt,mobile){ return evt.pageX; } function destraVirtuale(evt,mobile){ return evt.pageX+mobile.w; } function altoVirtuale(evt,mobile){ return evt.pageY; } function bassoVirtuale(evt,mobile){ return evt.pageY+mobile.h; } //________________________________________________________________________________________________ function ASinistraDelMargineDestro(evt,mobile, ostacolo){ if(sinistraVirtuale(evt,mobile)<destra(ostacolo) && altoVirtuale(evt,mobile)<basso(ostacolo) && bassoVirtuale(evt,mobile)>alto(ostacolo)) return true; return false; } function ADestraDelMargineSinistro(evt,mobile, ostacolo){ if(destraVirtuale(evt,mobile)>sinistra(ostacolo) && altoVirtuale(evt,mobile)<basso(ostacolo) && bassoVirtuale(evt,mobile)>alto(ostacolo)) return true; return false; } function InAltoDelMargineBasso(evt,mobile, ostacolo){ if(altoVirtuale(evt,mobile)<basso(ostacolo) && destraVirtuale(evt,mobile)>sinistra(ostacolo) && sinistraVirtuale(evt,mobile)<destra(ostacolo)) return true; return false; } function InBassoDelMargineAlto(evt,mobile, ostacolo){ if (bassoVirtuale(evt,mobile)>alto(ostacolo) && destraVirtuale(evt,mobile)>sinistra(ostacolo) && sinistraVirtuale(evt,mobile)<destra(ostacolo)) return true; return false; }