¿Cómo mover un personaje en todas direcciones sobre un Canvas?
Para dominar la gestión de un personaje en un canvas, es crucial entender cómo moverlo en diferentes direcciones. En este caso, trabajaremos con botones direccionales y funcionalidad continua para asegurar que el personaje, Capipepo, se desplazará suavemente en nuestro juego.
¿Qué pasos iniciales seguir para crear los botones?
Para empezar, es necesario generar los botones que permitirán mover a Capipepo. Los siguientes pasos resumen cómo configurar esto en HTML:
Duplicar la línea del botón existente: Se necesitan cuatro botones en total para cada dirección: arriba, abajo, izquierda y derecha.
Nombrar las funciones de movimiento: Estas funciones se llamarán moverArriba, moverAbajo, moverIzquierda y moverDerecha.
¿Cómo implementar las funciones de movimiento?
Cada una de las funciones determinará la dirección en la que se mueve Capipepo en el canvas, utilizando coordenadas x e y. A continuación, se presentan los detalles de cada función:
<!-- Botones de movimiento: --><buttononclick="moverArriba()">Arriba</button><buttononclick="moverIzquierda()">Izquierda</button><buttononclick="moverAbajo()">Abajo</button><buttononclick="moverDerecha()">Derecha</button>
functionmoverDerecha(){ capipepo.velocidadX=5;// Se mueve a la derecha}functionmoverIzquierda(){ capipepo.velocidadX=-5;// Se mueve a la izquierda}functionmoverAbajo(){ capipepo.velocidadY=5;// Se mueve hacia abajo}functionmoverArriba(){ capipepo.velocidadY=-5;// Se mueve hacia arriba}
¿Cómo garantizar el movimiento continuo?
Los movimientos deben continuar mientras el botón está presionado. Para esto, cambiamos el evento onclick del botón por dos eventos diferentes: onmousedown y onmouseup.
Evento onmousedown: Asigna velocidad al personaje.
Evento onmouseup: Detiene el movimiento del personaje.
Para actualizar constantemente la posición del personaje en el canvas, se utiliza la función de setInterval. Esta función se encargará de pintar al personaje en su nueva posición de acuerdo a su velocidad cada cierto tiempo en milisegundos.
functionpintarPersonaje(){ capipepo.x+= capipepo.velocidadX; capipepo.y+= capipepo.velocidadY;// Código para pintar a Capipepo en su nueva posición}let intervalo =setInterval(pintarPersonaje,50);
¿Qué hacer para detener el movimiento?
Cada vez que se suelta el botón del mouse, la velocidad asignada al personaje debe volver a cero, deteniendo así el movimiento.
Con estos pasos, puedes implementar un sistema básico para controlar el movimiento de un personaje sobre un canvas utilizando botones y asegurar que el personaje mantenga un movimiento fluido mientras se mantiene una tecla o botón presionado. ¡Sigue aprendiendo para mejorar tus habilidades y crear experiencias interactivas asombrosas!
Movimiento Continuo de Personajes en Canvas con JavaScript
En el tiempo 5:12 la profesora ++colapsa++ algunas funciones para ganar espacio en la pantalla y trabajar más cómodamente.
En vscode se pueden utilizar atajos de teclado que permiten esto mismo
Ctrl+Shift+P y después tecleamos >Fold All y por último tecleamos intro o enter.
Acá pueden ver todas mis funciones colapsadas:
Gracias Santiago, por el dato!!
Excelente dato hermano .
Rapipepo
rapipepo
Rapipepo🤑
Con cada clase que pasa me siento más como un niño con un juguete nuevo 🎈
Total, es un nuevo mundo de posibilidades!!
Esc completamente correcto, esto es dificl pero es emocionante :)
En el minuto 3:58 la profe se pone la 10 y explica como es para seleccionar rápido varias lineas que dicen lo mismo, se lo vi hacer a los otros profesores y nunca me entere como se hacia xD Gracias profe! <3
(Spoiler: es ctrl + d)
Ni un profe explico la manera de hacerlo pero un compañero en una clase lo comento y ahi fue cuando supe como, fue una de las recompensas de estar activad en la seccion de comentarios.
sii!! lo explico el profe de las anteriores clases, con Alt (o lo busqué yo en internet??nunca lo sabré, no me voy a fijar en las clases :-P)
Si a alguien le paso que onmousedown no le funciona como a mi siempre pueden usar los pointer Events (onpointerdown, onpointerup) que en resumen Chrome movió su compatibilidad desde onmousedown to pointer events para ser mas compatibles con todos los tipos de inputs que hay (touch, pencil, mouse) etc.
Yo descargué las flechas en svg, hay muchas páginas en las que podemos encontrar imagenes gratuitas.
Después les apliqué un poco de CSS
Para los que quieran camabiar los nombres de las direcciones a donde va el Mokepon:
↑ = Alt+24
↓ = Alt+25
→ = Alt+26
← = Alt+27.
Gracias!
Por fin un profe que explica los atajos que usa ☹️💚
Siii!! y que útil y practico!!
Note algo curioso y es que si se oprime cualquier botón y lo mantienes oprimido sin importar la dirección, arrastras el Mouse aun oprimiendo y luego lo sueltas fuera del boton, ya no se ejecuta la función de detener movimiento y el Mokepon se va, porque se dará esto amigos??
Si es cierto!! no se por que sea
Hola! no se si te sirve porque la pregunta es de hace un año, pero para que se detenga el movimiento al quitar el cursor del botón, hay que agregar la función detenerMovimiento al evento onmouseleave. En mi caso lo hice así con cada botón:
El problema es que onmouseup cuenta cuando "se levanta el dedo del click" estando el cursor sobre el botón. En cambio, onmouseleave se activa cuando el cursor deja de estar sobre el botón.
Espero sirva!
Un pequeño spoiler de cómo hacerlo con teclas
var teclas ={UP:38,DOWN:40,LEFT:37,RIGHT:39};functionmoverDerecha(){Capipepo.velocidadX=5;}functionmoverIzquierda(){Capipepo.velocidadX=-5;}functionmoverArriba(){Capipepo.velocidadY=-5;}functionmoverAbajo(){Capipepo.velocidadY=5;}functionmoverTeclas(evento){switch(evento.keyCode){case teclas.DOWN:moverAbajo()break;case teclas.UP:moverArriba()break;case teclas.LEFT:moverIzquierda()break;case teclas.RIGHT:moverDerecha()break;default:break;}}functiondetenerMovimiento(){Capipepo.velocidadX=0;Capipepo.velocidadY=0;}document.addEventListener("keydown", moverTeclas);document.addEventListener("keyup", detenerMovimiento);
wow que genial
AMAZING THIS CLASS.
Ñ
Para que la imagen de la mascota elegida sea dinámica, es decir, que no por defecto salga Capipepo sino la que se elija