Che ne faccio?
Il metodo step() ha bisogno di diversi parametri
this.step=function(intX,intY,limX,limY){...che sono necessari nel momento in cui io voglia far rimbalzare l'oggetto contro un limite.
I parametri intX e intY sono sempre necessari in quanto misurano la lunghezza di un passo, mentre i parametri limX e limY sono superflui quando non voglio far rimbalzare l'oggetto.
Allora posso ricorrere all'overloading, creando due metodi step, uno con i limiti e uno senza.
Credo che questa tecnica sia usabile in JavaScript.
Proviamo.
Questo è l'oggetto oggetto:
function oggetto(nome){ var MioNome=nome; var Sinistra=Number((document.getElementById(MioNome).style.left).replace("px","")); var Alto=Number((document.getElementById(MioNome).style.top).replace("px","")); var Larghezza=Number((document.getElementById(MioNome).style.width).replace("px","")); var Altezza=Number((document.getElementById(MioNome).style.height).replace("px","")); var Intervallo; var dirX="destra", dirY="basso" this.step=function(intX,intY,limX,limY){ if(Sinistra>limX) dirX="sinistra"; if(Sinistra<0) dirX="destra" if(dirX=="sinistra") intX=-intX; if(dirX=="destra") intX=intX; if(Alto>limY) dirY="alto"; if(Alto<0) dirY="basso" if(dirY=="alto") intY=-intY; if(dirX=="basso") intY=intY; Sinistra+=intX Alto+=intY document.getElementById(MioNome).style.left=Sinistra; document.getElementById(MioNome).style.top=Alto; } this.muovi=function(tempo, intX, intY, limX, limY){ clearInterval(Intervallo); Intervallo=window.setInterval(function(oggetto){oggetto.step(intX, intY, limX, limY)},tempo,this); } this.inter=function(){ clearInterval(Intervallo); } }Posso creare un'altra funzione step con i soli parametri relativi alla lunghezza del passo.
E ci vuole un'altra funzione muovi che chiami questa funzione anzichè quella con i limiti.
Ci provo.
function oggetto(nome){ var MioNome=nome; var Sinistra=Number((document.getElementById(MioNome).style.left).replace("px","")); var Alto=Number((document.getElementById(MioNome).style.top).replace("px","")); var Larghezza=Number((document.getElementById(MioNome).style.width).replace("px","")); var Altezza=Number((document.getElementById(MioNome).style.height).replace("px","")); var Intervallo; var dirX="destra", dirY="basso" this.step=function(intX,intY,limX,limY){ if(Sinistra>limX) dirX="sinistra"; if(Sinistra<0) dirX="destra" if(dirX=="sinistra") intX=-intX; if(dirX=="destra") intX=intX; if(Alto>limY) dirY="alto"; if(Alto<0) dirY="basso" if(dirY=="alto") intY=-intY; if(dirX=="basso") intY=intY; Sinistra+=intX Alto+=intY document.getElementById(MioNome).style.left=Sinistra; document.getElementById(MioNome).style.top=Alto; } this.step=function(intX,intY){ Sinistra+=intX Alto+=intY document.getElementById(MioNome).style.left=Sinistra; document.getElementById(MioNome).style.top=Alto; } this.muovi=function(tempo, intX, intY, limX, limY){ clearInterval(Intervallo); Intervallo=window.setInterval(function(oggetto){oggetto.step(intX, intY, limX, limY)},tempo,this); } this.muovi=function(tempo, intX, intY){ clearInterval(Intervallo); Intervallo=window.setInterval(function(oggetto){oggetto.step(intX, intY)},tempo,this); } this.inter=function(){ clearInterval(Intervallo); } }Ora uso i miei coriandoli con queste nuove funzioni...
Benissimo! Partono imperterriti e se ne vanno all'infinito! Segno che è stata usata la funzione muovi(tempo, intX, intY) anzichè la funzione muovi(tempo, intX, intY, limX, limY).
ù Ed ecco l'overloading realizzato!
Nessun commento:
Posta un commento