[Script Info] Title: [Events] Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text Dialogue: 0,0:00:00.00,0:00:04.85,Default,,0000,0000,0000,,En este punto te puedes dar cuenta de que has estado definiendo una función particular Dialogue: 0,0:00:04.90,0:00:09.32,Default,,0000,0000,0000,,cada vez que has querido animar tu programa, y es la función "draw". Dialogue: 0,0:00:09.32,0:00:13.75,Default,,0000,0000,0000,,Para que lo recuerdes aquí tenemos nuestro programa de carro animado Dialogue: 0,0:00:13.75,0:00:16.61,Default,,0000,0000,0000,,recuerda que tenemos nuestra variable "x" igual a 11 Dialogue: 0,0:00:16.61,0:00:18.31,Default,,0000,0000,0000,,que es la posición inicial del carro Dialogue: 0,0:00:18.31,0:00:20.36,Default,,0000,0000,0000,,y en "var draw" está todo nuestro código de dibujo Dialogue: 0,0:00:20.36,0:00:23.18,Default,,0000,0000,0000,,y luego cambiamos "x" y sumamos 3 cada vez Dialogue: 0,0:00:23.18,0:00:27.52,Default,,0000,0000,0000,,y luego podemos reiniciar y correrlo: ¡Wooo! Zoomy Zoomy Zoomy Dialogue: 0,0:00:27.52,0:00:31.11,Default,,0000,0000,0000,,Ahora que has aprendido cómo hacer tus propias funciones, Dialogue: 0,0:00:31.11,0:00:37.86,Default,,0000,0000,0000,,tal vez te preguntes: "¿Qué pasa con esta función de dibujo?, ¿Es una función personalizada? ¿Por qué siempre la llamamos "draw"? Dialogue: 0,0:00:37.86,0:00:39.80,Default,,0000,0000,0000,,Bueno, todas son buenas preguntas. Dialogue: 0,0:00:39.80,0:00:45.44,Default,,0000,0000,0000,,Verás, en nuestro entorno aquí en Khan Academy, hay algunas funciones globales especiales, Dialogue: 0,0:00:45.44,0:00:50.07,Default,,0000,0000,0000,,que yo llamo "Funciones Mágicas" pero eso es sólo el nombre que yo les doy. Dialogue: 0,0:00:50.07,0:00:55.07,Default,,0000,0000,0000,,Básicamente cuando corremos tu programa lo observamos para descubrir si definiste funciones con nombre específicos, Dialogue: 0,0:00:55.07,0:00:59.69,Default,,0000,0000,0000,,como "draw", y si lo has hecho, las llamamos en determinadas ocasiones. Dialogue: 0,0:00:59.69,0:01:02.91,Default,,0000,0000,0000,,Por ejemplo, cuando defines la función "draw" en tu código, Dialogue: 0,0:01:02.91,0:01:07.33,Default,,0000,0000,0000,,entonces encontramos esa función y miramos el código que está dentro de ella Dialogue: 0,0:01:07.33,0:01:12.08,Default,,0000,0000,0000,,y llamamos ese código una y otra vez de la manera más rápida que podamos. Dialogue: 0,0:01:12.08,0:01:17.24,Default,,0000,0000,0000,,Si no defines una función "draw", no llamaremos a ninguna función porque no hay nada ahí. Dialogue: 0,0:01:17.24,0:01:23.46,Default,,0000,0000,0000,,Esto significa que si renombramos esta función como "drow" Dialogue: 0,0:01:23.46,0:01:25.96,Default,,0000,0000,0000,,ok, eso no funciona Dialogue: 0,0:01:25.96,0:01:29.36,Default,,0000,0000,0000,,O si la llamamos "drawCar", no funciona Dialogue: 0,0:01:29.36,0:01:34.91,Default,,0000,0000,0000,,Así que si renombramos la función, el programa ya no la encuentra porque no se llama "draw" Dialogue: 0,0:01:34.91,0:01:38.81,Default,,0000,0000,0000,,por lo que no se ejecuta ese código una y otra vez y el programa termina con nada. Dialogue: 0,0:01:38.81,0:01:45.94,Default,,0000,0000,0000,,Esto significa que no deberías nombrar a tu función personalizada como "draw" a menos que quieras que sea ejecutada de manera especial Dialogue: 0,0:01:45.94,0:01:48.84,Default,,0000,0000,0000,,y sea llamada una y otra vez. Dialogue: 0,0:01:48.84,0:01:51.81,Default,,0000,0000,0000,,Ahora, "draw" no es la única función mágica disponible Dialogue: 0,0:01:51.81,0:01:58.43,Default,,0000,0000,0000,,Hay muchas otras funciones que reaccionan a la interacción del ratón y a la pulsación de teclas. Dialogue: 0,0:01:58.43,0:02:02.63,Default,,0000,0000,0000,,Déjenme mostrar un ejemplo de otro programa de animación. Dialogue: 0,0:02:02.63,0:02:13.23,Default,,0000,0000,0000,,Digamos que queremos dibujar un círculo coloreado por donde el usuario mueva el ratón. Dialogue: 0,0:02:13.23,0:02:19.87,Default,,0000,0000,0000,,Entonces tenemos "draw" y luego "fill" y luego "ellipse" en "(mouseX, mouseY, 10, 10)" Dialogue: 0,0:02:19.87,0:02:21.44,Default,,0000,0000,0000,,Ok, vamos a probar. ¡Genial! Dialogue: 0,0:02:21.44,0:02:24.52,Default,,0000,0000,0000,,Tenemos esta maravillos cosa redonda coloreada pasando por ahí Dialogue: 0,0:02:24.52,0:02:30.36,Default,,0000,0000,0000,,Así que esta función, este código dentro de la función "draw" se estará llamando una y otra vez Dialogue: 0,0:02:30.36,0:02:33.52,Default,,0000,0000,0000,,Porque lo hemos puesto dentro de una función llamada "draw" Dialogue: 0,0:02:33.52,0:02:39.63,Default,,0000,0000,0000,,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. Dialogue: 0,0:02:39.63,0:02:47.11,Default,,0000,0000,0000,,Como resultado hay una mejor manera de hacer esto, más eficiente Dialogue: 0,0:02:47.11,0:02:52.68,Default,,0000,0000,0000,,lo que podemos hacer es cambiar la función "draw" por la función "mouseMoved" Dialogue: 0,0:02:52.68,0:02:59.19,Default,,0000,0000,0000,,Nuestro entorno siempre revisa los programas para ver si tienen definida la función "mouseMoved" Dialogue: 0,0:02:59.19,0:03:06.19,Default,,0000,0000,0000,,Si la tienen, la llamarán siempre que el usuario mueva el ratón. Puedes verlo otra vez, sigue funcionando. Dialogue: 0,0:03:06.19,0:03:13.86,Default,,0000,0000,0000,,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. Dialogue: 0,0:03:13.86,0:03:21.52,Default,,0000,0000,0000,,Recuerda cuando teníamos la función "draw" el código era llamado una y otra vez, aunque el ratón no estuviera cambiando. Dialogue: 0,0:03:21.52,0:03:27.02,Default,,0000,0000,0000,,Ahora que estamos usando "mouseMoved" sólo llamamos el código cuando lo necesitamos, cuando el ratón realmente se mueve. Dialogue: 0,0:03:27.02,0:03:34.00,Default,,0000,0000,0000,,Nuestro programa es más eficiente. En general, si sólo quieres cambiar los resultados del programa cuando el usuario mueve el ratón Dialogue: 0,0:03:34.00,0:03:39.69,Default,,0000,0000,0000,,entonces es mejor usar la función "mouseMoved" en lugar de "draw". Dialogue: 0,0:03:39.69,0:03:43.96,Default,,0000,0000,0000,,Hay muchas otras funciones mágicas como "mouseMoved". Dialogue: 0,0:03:43.96,0:03:49.77,Default,,0000,0000,0000,,Está la función "mousePressed" y "mouseReleased" y "keyPressed" y puedes leer todo acerda de ellas en la documentación. Dialogue: 0,0:03:49.77,0:03:55.19,Default,,0000,0000,0000,,La clave a recordar es ésta: Si deseas usar las funciones mágicas debes escribirlas correctamente. Dialogue: 0,0:03:55.19,0:04:00.54,Default,,0000,0000,0000,,Si no las deseas usar, asegúrate de poner un nuevo nombre a tus funciones personalizadas.