JavascriptProva

martedì 22 gennaio 2013

Collisioni: nuovo modo per bloccare l'oggetto.

Ecco: anzichè muovere l'oggetto che poi mi viene continuamente rispinto indietro, adesso pongo una condizione perchè lo spostamento sia possibile: in questo caso dico al codice che se lo spostamento è verso destra, non deve essere fatto, mentre se è verso sinistra si può fare:
 //CODICE CHE MUOVE L'OGGETTO
 if (event.clientX-MouseX<0) oggetto.style.left=(BaseX+event.clientX-MouseX)+"px";;
 
 oggetto.style.top=(BaseY+event.clientY-MouseY)+"px"; 
}
Funziona: così facendo, sono possibili solo gli spostamenti negativi, verso sinistra. Ora facciamo il contrario:
 //CODICE CHE MUOVE L'OGGETTO
 if (event.clientX-MouseX>0) oggetto.style.left=(BaseX+event.clientX-MouseX)+"px";;
 
 oggetto.style.top=(BaseY+event.clientY-MouseY)+"px"; 
} 
Ecco, bene. Ovviamente funziona anche questo!
Ora facciamo che se il margine destro dell'oggetto arriva a 400 l'oggetto non si può spostare più a destra.
if(destro(oggetto)>400){
  if (event.clientX-MouseX<0) oggetto.style.left=(BaseX+event.clientX-MouseX)+"px";
 }else{
  oggetto.style.left=(BaseX+event.clientX-MouseX)+"px";
 }
Ecco...
Adesso proviamo a svilupparlo con le funzioni che esprimono la sovrapposizione a un ostacolo...

 if(daSinistra(oggetto,ostacolo)){
  if (event.clientX-MouseX<0) oggetto.style.left=(BaseX+event.clientX-MouseX)+"px";
 }else{
  oggetto.style.left=(BaseX+event.clientX-MouseX)+"px";
 }
 oggetto.style.top=(BaseY+event.clientY-MouseY)+"px"; 
Funziona ancora. E ovviamente aggira l'ostacolo.
Però è impreciso perchè a seconda della velocità del movimento l'oggetto si arresta in un punto variabile.

Organizziamo diverse istruzioni, una che muove a destra, una che muove a sinistra...

Creando queste due funzioni:
function MuoviADestra(){
 if(event.clientX-MouseX>0) oggetto.style.left=(BaseX+event.clientX-MouseX)+"px";
}
function MuoviASinistra(){
 if(event.clientX-MouseX<0) oggetto.style.left=(BaseX+event.clientX-MouseX)+"px";
} 
E creando queste due variabili booliane:
var MoveRight=true;
var MoveLeft=true;
io riesco a interrompere il movimento dell'oggetto quando il suo margine destro supera 400 in questo modo:
 //CODICE CHE MUOVE L'OGGETTO
 if(MoveRight) MuoviADestra();
 if(MoveLeft) MuoviASinistra();
 if (destro(oggetto)>400) {
  oggetto.style.left=(400-larghezza(oggetto))+"px";
  MoveRight=false;
 }else{
  MoveRight=true;
 }
In questo modo l'oggetto non si sposta virtualmente, come accadeva prima. Almeno credo...

Nessun commento:

Posta un commento