Ciao a tutti,
sono dietro a questo script da questa mattina e non riesco più ad arrivare alla soluzione di un problema:
Dato il codice sotto riportato, come faccio a rilevare continuamente la posizione del puntatore del mouse all'interno del canvas?
Se andate in fondo allo script ci sono 2 eventi che vengono controllati per modificare la posizione del canvas:
E la funzione che si incarica dello spostamento della barra stessa è:codice:topolino.addEventListener("mouseover",spostaBarra); topolino.addEventListener("click",spostaBarra);
Grazie,codice:function spostaBarra(e){ puntoR.setCoordinate(e.clientX-9,0); rettangolo.spostaSuRetta(puntoR,foglio); }
Roberto
codice:<html> <head> <title></title> <meta charset="utf-8"> <script type="text/javascript"> //---------------------------------------------------- function Punto(cX,cY){ var x=cX; var y=cY; this.setCoordinate=function (coordinataX,coordinataY){ x=coordinataX; y=coordinataY; }; this.getX=function(){return x;}; this.getY=function(){return y;}; this.maggiore=function(punto){ if (this.getX()>punto.getX() && this.getY()>punto.getY()){ return true; }else{return false;} }; } //---------------------------------------------------- function Rettangolo(puntoA,puntoB){ var p1=puntoA; var p2=puntoB;//il punto b sono largezza e altezza var f1; var altezza=p2.getY(); var larghezza=p2.getX(); this.getPuntoA=function(){return p1;}; this.getAltezza=function(){return altezza}; this.getLarghezza=function(){return larghezza;}; this.disegna=function(foglio){ f1=foglio.getFoglio(); f1.fillStyle="#abf"; var a1=p1.getX(); var a2=p1.getY(); var a3=p2.getX(); var a4=p2.getY(); f1.fillRect(a1,a2,a3,a4); }; this.cancella=function(foglio){ f1=foglio.getFoglio(); f1.beginPath();//Inizializza il path, o resetta il path corrente f1.fillStyle= '#FFF'; f1.fillRect(p1.getX(),p1.getY(),p2.getX(),p2.getY()); }; this.spostaSuRetta=function(puntoNuovo,foglio){ this.cancella(foglio); var pN=puntoNuovo; p1.setCoordinate(pN.getX(),p1.getY()); this.disegna(foglio); }; } //---------------------------------------------------- function Palla(punto,raggio){ var p=punto; var r=raggio; var f1; this.getRaggio=function (){return r;}; this.setRaggio=function(rag){r=rag;}; this.getPunto=function(){return p;}; this.getX=function(){return punto.getX();}; this.getY=function(){return punto.getY();}; var xVerso=true; var yVerso=true; this.setXVerso=function(boolean){xVerso=boolean;}; this.setYVerso=function(boolean){yVerso=boolean;}; this.disegna=function(foglio){ f1=foglio.getFoglio(); f1.beginPath();//Inizializza il path, o resetta il path corrente f1.arc(p.getX(), p.getY(), r, 0, 2*Math.PI, false); f1.fillStyle = '#a2a'; f1.fill(); }; this.sposta=function(puntoB,foglio){ this.cancella(); this.controllaCollisioneBordo(puntoB,foglio); p.setCoordinate(puntoB.getX(),puntoB.getY()); this.disegna(foglio); }; this.controllaCollisioneBordo=function(puntoB,foglio){ var minX=this.getRaggio(); var minY=this.getRaggio(); var maxX=foglio.getLarghezza()-this.getRaggio(); var maxY=foglio.getAltezza()-this.getRaggio(); var x=puntoB.getX(); var y=puntoB.getY(); if(y>=maxY){this.setYVerso(false);} if(y<=minY){this.setYVerso(true);} if(x>=maxX){this.setXVerso(false);} if(x<=minX){this.setXVerso(true);} }; this.setXVerso=function(booleano){xVerso=booleano}; this.getXVerso=function(){return xVerso;}; this.setYVerso=function(booleano){yVerso=booleano}; this.getYVerso=function(){return yVerso;}; this.controllaCollisione=function (rettangolo){ //parte superiore if (this.getY()+this.getRaggio()>=rettangolo.getPuntoA().getY() && this.getY()+this.getRaggio()<=rettangolo.getPuntoA().getY()+3 && this.getX()>=rettangolo.getPuntoA().getX() && this.getX()<=rettangolo.getPuntoA().getX()+rettangolo.getLarghezza()){ this.setYVerso(false); //in base a dove ha battuto la palla devi cambiare l'angolo } //parte inferiore //sinistra //destra }; this.cancella=function(){ f1.beginPath();//Inizializza il path, o resetta il path corrente f1.arc(p.getX(), p.getY(), this.getRaggio()+.5, 0, 2*Math.PI, false); f1.fillStyle = '#FFF'; f1.fill(); }; } //---------------------------------------------------- function Foglio(idElemento){ var idE=idElemento; var canvas = document.getElementById(idE); if (canvas==undefined){ console.error("Errore, non esiste alcun elemento con id '"+idE+"'."); } var c = canvas.getContext('2d');//il metodo getContext() mi restituisce un oggetto che mi permette di disegnare nel canvas creato in html this.getFoglio=function(){return c;}; this.getIdElemento=function(){return idE;}; this.getLarghezza=function(){ return canvas.width; }; this.getAltezza=function(){ return canvas.height; }; this.setMaxY=function(){}; this.setMinY=function(){}; this.setMaxX=function(){}; this.setMinX=function(){}; } //************************************************************** window.onload=function(){ var punto=new Punto(40,40);; var punto2=new Punto(40,40); var puntoR=new Punto(0,0); var palla=new Palla(punto,6); var foglio=new Foglio("disegno"); var rettangolo=new Rettangolo(new Punto(10,foglio.getAltezza()-15),new Punto(100,foglio.getAltezza())); rettangolo.disegna(foglio); var interval; var ciclo,intervallo; palla.disegna(foglio); var b=document.getElementById("bottone1"); var c=document.getElementById("bottone2"); var topolino=document.getElementById("disegno"); //--------------------------------------------------------- function coordinate(){ document.getElementById("scrivi").innerHTML="x="+palla.getX()+" y="+palla.getY(); } //--------------------------------------------------------- function dammiCoordinateMouse(evt){ document.getElementById("scrivi").innerHTML="x="+evt.clientX+" y="+evt.clientY; } //--------------------------------------------------------- function inizia(){ var x = punto.getX(); var y = punto.getY(); var angolo=1; var i=0; if (ciclo!=null){ clearInterval(ciclo); } ciclo = setInterval(function () { if (i == 90000) { clearInterval(ciclo); } else { punto2.setCoordinate(x*angolo, y); palla.sposta(punto2,foglio); palla.controllaCollisioneBordo(punto2,foglio); palla.controllaCollisione(rettangolo);//verifica collisione tra oggetto rettangolo e palla if (palla.getXVerso()==true){x++;}else{x--;} if (palla.getYVerso()==true){y++;}else{y--;} i++; } } , 2); } //--------------------------------------------------------- function spostaBarra(e){ puntoR.setCoordinate(e.clientX-9,0); rettangolo.spostaSuRetta(puntoR,foglio); } //--------------------------------------------------------- b.addEventListener("click",coordinate); c.addEventListener("click",inizia); topolino.addEventListener("mouseover",spostaBarra); topolino.addEventListener("click",spostaBarra); //--------------------------------------------------------- } </script> </head> <body> <canvas width="800" height="350" id="disegno" style="border:1px solid #d3d3d3;"></canvas> <br> <div id="scrivi">Coordinate</div> <input type="button" id="bottone1" value="Coordinate"> <input type="button" id="bottone2" value="Inizia"> </body> </html>

Rispondi quotando