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