Prima di tutto ringrazio aika per le risposte.
Nel codice che inserisco ora, invece di tempo1 e tempo(), per evitare confusioni, ho inserito gli identificatori cronometro e muove() e uso l'indentazione che avevo tolto per accorciare il programma e vederlo meglio in una schermata.
Funziona perfettamente perché ho commentato le righe
// function avvia() {
// }
Ma se si toglie il commento alle due righe, la funzione muove() diventa interna alla funzione avvia() e, non so perché, non viene riconosciuta e dà l'errore "muovi is not a function".
E' da notare che, nel secondo programma che ho inserito precedentemente, la funzione muove(), che è interna ad avvia(), è riconosciuta ed eseguita correttamente.
Il motivo del malfunzionamento non è quindi la confusione di identificatori. Ringraziando ancora per l'aiuto spero di trovare il motivo del malfunzionamento
lanvoel
codice:<!doctype html> <html> <body> <canvas id="myCanvas" width"300" height="200" style="border:1px solid red; background:cyan";></canvas> <br> <input type="button" value="avvia1" onclick="avvia()"> <input type="button" value="ferma" onclick="ferma()"> <script> var cronometro; var x=1; var y=1; dx=1; dy=1; var c=document.getElementById("myCanvas"); var ctx=c.getContext("2d"); //function avvia() { cronometro=window.setInterval("muove()",10); function muove() { ctx.clearRect(0,0,myCanvas.width, myCanvas.height); if(dx==1) { x++; if(x>=280) {dx=-1} } if(dx==-1){ x--; if(x<=0) {dx=1} } if(dy==1) { y++; if(y>=180) {dy=-1} } if(dy==-1){ y--; if(y<=0) {dy=1} } ctx.beginPath() ctx.strokeStyle="red"; ctx.lineWidth=4; ctx.fillStyle="blue" ctx.arc(10+x,10+y,10,0,2*Math.PI); ctx.fill(); ctx.stroke(); ctx.closePath(); } //} function ferma() { clearInterval(cronometro); } </script> </body> </html

Rispondi quotando
