En este punto te puedes dar cuenta de que has estado definiendo una función particular
cada vez que has querido animar tu programa, y es la función "draw".
Para que lo recuerdes aquí tenemos nuestro programa de carro animado
recuerda que tenemos nuestra variable "x" igual a 11
que es la posición inicial del carro
y en "var draw" está todo nuestro código de dibujo
y luego cambiamos "x" y sumamos 3 cada vez
y luego podemos reiniciar y correrlo: ¡Wooo! Zoomy Zoomy Zoomy
Ahora que has aprendido cómo hacer tus propias funciones,
tal vez te preguntes: "¿Qué pasa con esta función de dibujo?, ¿Es una función personalizada? ¿Por qué siempre la llamamos "draw"?
Bueno, todas son buenas preguntas.
Verás, en nuestro entorno aquí en Khan Academy, hay algunas funciones globales especiales,
que yo llamo "Funciones Mágicas" pero eso es sólo el nombre que yo les doy.
Básicamente cuando corremos tu programa lo observamos para descubrir si definiste funciones con nombre específicos,
como "draw", y si lo has hecho, las llamamos en determinadas ocasiones.
Por ejemplo, cuando defines la función "draw" en tu código,
entonces encontramos esa función y miramos el código que está dentro de ella
y llamamos ese código una y otra vez de la manera más rápida que podamos.
Si no defines una función "draw", no llamaremos a ninguna función porque no hay nada ahí.
Esto significa que si renombramos esta función como "drow"
ok, eso no funciona
O si la llamamos "drawCar", no funciona
Así que si renombramos la función, el programa ya no la encuentra porque no se llama "draw"
por lo que no se ejecuta ese código una y otra vez y el programa termina con nada.
Esto significa que no deberías nombrar a tu función personalizada como "draw" a menos que quieras que sea ejecutada de manera especial
y sea llamada una y otra vez.
Ahora, "draw" no es la única función mágica disponible
Hay muchas otras funciones que reaccionan a la interacción del ratón y a la pulsación de teclas.
Déjenme mostrar un ejemplo de otro programa de animación.
Digamos que queremos dibujar un círculo coloreado por donde el usuario mueva el ratón.
Entonces tenemos "draw" y luego "fill" y luego "ellipse" en "(mouseX, mouseY, 10, 10)"
Ok, vamos a probar. ¡Genial!
Tenemos esta maravillos cosa redonda coloreada pasando por ahí
Así que esta función, este código dentro de la función "draw" se estará llamando una y otra vez
Porque lo hemos puesto dentro de una función llamada "draw"
Así que se estará llamando incluso si el usuario no está moviendo el ratón. Se está llamando ahora mismo, aunque no estoy moviendo el ratón.
Como resultado hay una mejor manera de hacer esto, más eficiente
lo que podemos hacer es cambiar la función "draw" por la función "mouseMoved"
Nuestro entorno siempre revisa los programas para ver si tienen definida la función "mouseMoved"
Si la tienen, la llamarán siempre que el usuario mueva el ratón. Puedes verlo otra vez, sigue funcionando.
Pero, la función no es llamada si el usuario no mueve el ratón, tan pronto como el ratón se detiene la función deja de ser llamada.
Recuerda cuando teníamos la función "draw" el código era llamado una y otra vez, aunque el ratón no estuviera cambiando.
Ahora que estamos usando "mouseMoved" sólo llamamos el código cuando lo necesitamos, cuando el ratón realmente se mueve.
Nuestro programa es más eficiente. En general, si sólo quieres cambiar los resultados del programa cuando el usuario mueve el ratón
entonces es mejor usar la función "mouseMoved" en lugar de "draw".
Hay muchas otras funciones mágicas como "mouseMoved".
Está la función "mousePressed" y "mouseReleased" y "keyPressed" y puedes leer todo acerda de ellas en la documentación.
La clave a recordar es ésta: Si deseas usar las funciones mágicas debes escribirlas correctamente.
Si no las deseas usar, asegúrate de poner un nuevo nombre a tus funciones personalizadas.