Cuando el valor de una propiedad de un objeto es una función se le llama: método.
El método, entonces, es una función que está asociada a un objeto.
Fundamentos de Programación
Programación desde Cero con JavaScript
Programación Básica con Consola de Navegador
Creación y gestión de archivos HTML básicos
Estructura Básica de Documentos HTML
Conoce la estructura básica de HTML y cómo integrarla con JavaScript
Instalación de Visual Studio Code y configuración inicial
Variables y texto dinámico en JavaScript
Programación de Piedra, Papel o Tijera en JavaScript
Algoritmo de Piedra, Papel o Tijera en JavaScript
Generación de Números Aleatorios en JavaScript
Funciones en JavaScript: Uso y Buenas Prácticas
Condiciones y Ciclos en Programación Python
Programación: Control de Flujos con Ciclos While
Rutas Absolutas y Relativas en Sistemas de Archivos y Web
Manipulación del DOM y Eventos en JavaScript
Quiz: Fundamentos de Programación
Desarrollando un juego con HTML y JavaScript
Maquetación de páginas web con HTML y CSS
Selección de Mascota en HTML con Inputs de Tipo Radio
JavaScript: Hacer Funcionar Botón de Selección de Mascota
Eventos en JavaScript: Escucha Carga de HTML y Ejecuta Función
Condicionales en JavaScript: Verificación de Inputs
Manipulación del DOM con JavaScript: Actualizar Contenido Dinámico.
Selector de Mascota Enemiga con JavaScript y Números Aleatorios
Eventos con addEventListener en Botones de Ataque HTML
Selección aleatoria de ataques para enemigos en JavaScript
Creación de Elementos HTML con JavaScript: `createElement` y `appendChild`
Programación Funcional en JavaScript: Conceptos y Ejemplos Prácticos
Tablas de Verdad: Operadores Lógicos en Programación
Cambio dinámico de vidas en combates con JavaScript
JavaScript: Validación de Vidas en juego de Combate
"JavaScript: Activar reinicio y desactivar botones post-juego"
Mostrar y Ocultar Elementos HTML con JavaScript
Quiz: Desarrollando un juego con HTML y JavaScript
Estilos con CSS
Propiedades y selectores CSS: Estiliza tu página web
Tipos de Display en CSS: Block, Inline e Inline-Block
Alineación y Posicionamiento con Flexbox en CSS
Modelo de Caja en CSS: Margen, Borde y Relleno
Estilos Flexbox para Diseñar una Web Atractiva
Estilos CSS avanzados para botones interactivos en juegos
Estilos CSS para Juegos con HTML y JavaScript
Estiliza Elementos con Flexbox para Proyectos Web
Separación de Elementos en Mensajes con JavaScript y HTML
Maquetación con CSS Grid: Crear Rejillas y Distribuir Contenidos
Diseño Responsivo: Usando Media Queries en CSS
Pseudoclases CSS: Hacer Visible la Selección en Formularios
Quiz: Estilos con CSS
Optimización de código
Optimización de Código JavaScript para Juegos Interactivos
Refactorización de Código: Reutilización de Variables en JavaScript
Clases y objetos en JavaScript para videojuegos
Creación de Objetos en JavaScript: Clases y Propiedades Básicas
Manejo de Arreglos en JavaScript: Creación y Manipulación de Datos
Manipulación del DOM con JavaScript y Mokepones
Manipulación HTML con JavaScript: Inyectando Mokepones Dinámicamente
Depuración de Errores en JavaScript: Variables y Elementos HTML
Gestión de Objetos en JavaScript: Fuente Única de Verdad
Manipulación de Arreglos en JavaScript: Selección de Elementos Aleatorios
Iteración de Arreglos en JavaScript: Mostrar Datos en HTML
Función que Genera Botones Dinámicos en JavaScript
Eventos de Clic en Botones con JavaScript
Validación de secuencia de ataques en JavaScript
Validación de ataques en juegos HTML: lógica y JavaScript
Diseño de Algoritmos para Juegos Interactivos
Optimización de Estilos en Juegos Web con CSS
Quiz: Optimización de código
Mapa con canvas
Mapa Interactivo con Canvas y JavaScript
HTML y JavaScript para Movimiento en Canvas
Control de Movimiento en Canvas con JavaScript
Eventos de Teclado: Movimiento de Personajes en JavaScript
Pintar imágenes y personajes en Canvas HTML
Métodos de la Clase Mokepon: Cómo Pintar y Mover Enemigos
Detección de colisiones en videojuegos con JavaScript
Colisiones en Desarrollo de Videojuegos con JavaScript
Redimensionar mapas en JavaScript: adaptable a pantalla completa
Estilos CSS Avanzados para Páginas Responsivas
Quiz: Mapa con canvas
Backend: videojuego multijugador
Comunicación Cliente-Servidor con HTTP y APIs
Instalación de Node.js en Windows para desarrollo backend
Uso de la Terminal de Comandos para Desarrolladores Node.js
Servidor Web con Express.js: Creación y Configuración Básica
Entendiendo URIs y HTTP en Desarrollo Web
Comunicación entre Frontend y Backend con Node.js
Comunicación Frontend-Backend con JSON para Selección de Mokepones
"Actualización de Coordenadas en Node.js para Juegos Multijugador"
Gestión de Coordenadas en Multiplayer con JavaScript
Optimización de Código en JavaScript para Videojuegos
Batalla Final Mokepon: Intercambio de Ataques en Línea
Programación de Fetch API con JavaScript en Aplicaciones Web
Quiz: Backend: videojuego multijugador
Próximos pasos
Programación Multijugador con Node.js y Express
Desarrollo web backend con Node.js y Express
No tienes acceso a esta clase
¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera
Integrar enemigos en tu juego aporta no sólo emoción, sino también un mayor desafío y dinamismo. En esta clase, aprenderemos a modificar nuestra implementación actual para lograr que nuestros enemigos se pinten correctamente en el mapa. Esto implica comprender las funciones de nuestra clase y cómo podemos utilizarlas para optimizar el código.
Mokepon
?Inicialmente, nuestra clase Mokepon
tenía atributos básicos como X
, Y
, ancho
, y alto
. Vamos a necesitar cambiar el enfoque para que los atributos X
e Y
sean argumentos que se pasan al constructor, permitiendo una mayor flexibilidad al posicionar nuestros personajes en el mapa.
class Mokepon {
constructor(fotoMapa, x = 10, y = 10) {
this.fotoMapa = fotoMapa;
this.x = x;
this.y = y;
this.ancho = 40; // Actualizado a 40 para menor tamaño
this.alto = 40; // Actualizado a 40 para menor tamaño
// Otros atributos relevantes...
}
// Métodos adicionales...
}
Utilizamos la imagen del avatar para cada Mokepon usando un directorio de recursos y aplicamos un parámetro por defecto para X
e Y
.
Para representar enemigos en nuestro mapa, crearemos un array y añadiremos los Mokepones con posiciones específicas para diferenciarlos en el plano.
const enemigos = [];
enemigos.push(new Mokepon('assets/hipodoge.png', 80, 120));
enemigos.push(new Mokepon('assets/capipepo.png', 150, 95));
enemigos.push(new Mokepon('assets/ratigueya.png', 200, 190));
Luego, definimos un método pintarMokepon
dentro de nuestra clase para encargarse de la representación gráfica de cada enemigo en pantalla.
pintarMokepon() {
lienzo.drawImage(
this.fotoMapa,
this.x,
this.y,
this.ancho,
this.alto
);
}
La implementación dentro de las clases nos permite reutilizar código y mantenerlo más limpio. Al implementar métodos como pintarMokepon
, simplificamos la representación visual de objetos en el mapa. Reformulamos la función que manipulaba el Canvas
para integrar estas capacidades.
function pintarCanvas() {
// Pintamos el Mokepon del jugador
mascotaJugadorObjeto.pintarMokepon();
// Pintamos los enemigos
enemigos.forEach(enemigo => enemigo.pintarMokepon());
}
Esta metodología garantiza que todos los elementos se presentan adecuadamente en diferentes posiciones. El método interno pintarMokepon
utiliza this
para acceder a las propiedades del objeto respectivo.
Sorprendentemente, ahora cada Mokepon se despliega correctamente en el mapa y podemos abordar el reto de enfrentar a nuestro personaje contra estos enemigos en las siguientes lecciones.
Al dominar estas técnicas, mejoramos nuestra aplicación de JavaScript para crear dinámicas más ricas y envolventes en juegos interactivos. Sigue adelante y no te detengas, ¡estás a un paso más cerca de convertirte en un desarrollador maestro!
Aportes 76
Preguntas 22
Cuando el valor de una propiedad de un objeto es una función se le llama: método.
El método, entonces, es una función que está asociada a un objeto.
si ponen la funcion aleatorio en el constructor de la clase mokepon, en las cordenadas X y Y, los mokepones salen aleatorios.
this.x= aleatorio(0,320)
this.y= aleatorio(0,240)
va tomando forma 😁
Aquí les dejo las cabezas de nuestros Mokepones
Por personalizar a mis mascotas

Bueno!!!
.
Hay vamos…
.
.
.
Que gran avance!!!
Mi mapa:
Wowow este curso básico no esta tan básico después de todo espero seguir mas adelante aprendiendo y no sentirme mas perdido con las demás cursos de JS
Quisiera compartirles un poco de como yo he ido haciendo este proyecto a mi manera con las bases del curso.
let invocaciones = [sammy, amalthea, ashley];
let enemigos
function IndiceEnemigos (){
enemigos = invocaciones.filter(function(pj){
return pj.nombre != invocaciones[indiceInvocacion_p1].nombre
})
}
-Por último use nuestra función para crear números aleatorios en la posición donde sale cada personaje, así se evita que salgan siempre en el mismo sitio ( lo que sí hice fue limitar una zona para cada personaje porque aunque es aleatorio salían muy cerca algunas veces)
PD: los rangos van según el tamaño de nuestro canva teniendo en cuenta el tamaño de las imágenes también.
invocaciones[1].x = aleatorio(200,500);
invocaciones[1].y = aleatorio(150,350);
Así va quedando :3
Bueno, realmente es como sigue:
Propiedad es una función del objeto que establece o devuelve un valor, como Color.
Método es una función que puede no retornar un valor, pero que ejecuta una acción, como MoverDerecha(espacios), o Dibujar.
Evento es una función que es llamada por el propio objeto y queda disponible para que el programador la aproveche si lo necesita, como CambioColor (colorAnterior), CambioPosición(PosicionAnterior), SeAgregoUnAtaque(NuevoAtaque), Click, Drag…
vamos!!!
Esta quedando chido 😃
El en reto de la ultima clase del anterior modulo, nos pidieron agregar los 3 mokepones restantes, pero aqui solo dan el rostro de los 3 iniciales
Aprovechando la función Aleatorio que ya tenemos, coloqué cada Mokepón en un lugar al azár:
let hipodoge = new Mokepon(‘Hipodoge’,’./assets/Hipodoge.png’,0,’./assets/Hipodoge.png’,aleatorio(10,630), aleatorio(10,470))
/* Aquí aún no se ha definido el Canvas, así que use las dimensiones de pantalla (640x480) menos 10, para que todos estén en el mapa, pero esto se puede mejorar…
Luego, los pinto todos con un ciclo en la función correspondiente:
mokepones.forEach((moke) => {
moke.dibujar()
})
pensé que iba a dejar el curso, la clase pasada no podía continuar, luego descubrí el error y pude seguir.😁😁
Yo le agregué un poco de picante 🔥 para que la posición de los enemigos sea aleatoria.
let hipodoge = new Mokepon('Hipodoge','./assets/mokepons_mokepon_hipodoge_attack.png', 5, './assets/hipodoge.png')
let capipepo = new Mokepon('Capipepo','./assets/mokepons_mokepon_capipepo_attack.png', 5, './assets/capipepo.png')
let ratigueya = new Mokepon('Ratigueya','./assets/mokepons_mokepon_ratigueya_attack.png', 5, './assets/ratigueya.png')
let hipodogeEnemigo = new Mokepon('Hipodoge','./assets/mokepons_mokepon_hipodoge_attack.png', 5, './assets/hipodoge.png', Math.random()*mapa.width, Math.random()*mapa.height)
let capipepoEnemigo = new Mokepon('Capipepo','./assets/mokepons_mokepon_capipepo_attack.png', 5, './assets/capipepo.png', Math.random()*mapa.width, Math.random()*mapa.height)
let ratigueyaEnemigo = new Mokepon('Ratigueya','./assets/mokepons_mokepon_ratigueya_attack.png', 5, './assets/ratigueya.png', Math.random()*mapa.width, Math.random()*mapa.height)
No puedo seguir la clase, se quebró mi código, lo revise varias veces y no entiendo porque no me funciona. Alguna idea o sugerencia?
Ami me quedo así
no pude seguir de esta clase, copio pego mis personames y le cambio el nombre agregandoles Enemigo pero no sucede nada, yo tengo 6 personajes, copie y pegue los ultimos 3 y les agrege enemigo y del resto hice todo igual y no funciona y en la consola no sale error. ayuda!
yo en vez de crear todos los personajes de nuevo, pero con el “enemigo”, guarde la mascota aleatoria en una variable llamada mascotaDelEnemigo, luego prácticamente copie el sistema creado para hacer aparecer a la mascota del jugador, y de esta forma hice que apareciera el enemigo en el mapa
Vamos bien.
Hola a todos! Me parece mas entretenido si hacemos que los mokepones enemigos tengan una posición diferente cada vez que se inicia el juego. Para ello, usé la función aleatorio cuando creo los objestos enemigos:
<code>
let hipodogeEnemigo = new Mokepon('Hipodoge','./assets/mokepons_mokepon_hipodoge_attack.png',5,'./assets/hipodoge.png', aleatorio(10,250), aleatorio(10,200))
let capipepoEnemigo = new Mokepon('Capipepo','./assets/mokepons_mokepon_capipepo_attack.png',5,'./assets/capipepo.png',aleatorio(10,250),aleatorio(10,200))
let ratigueyaEnemigo = new Mokepon('Ratigueya','./assets/mokepons_mokepon_ratigueya_attack.png',5,'./assets/ratigueya.png',aleatorio(10,250),aleatorio(10,200))
Estas clases son muy adictivas. Uno se ve una y quiere ver las otras 10. Gracias totales.
¡Vamos así! 😄 Más adelante pienso rediseñar algunos mokepones para diferenciarlos entre enemigos y el mokepon del jugador 😉.
https://media.tenor.com/IeSvLs07zsAAAAAC/ice-age-possum.gif
TEAM RATIGUEYA
Me encanta esta profesora, se detiene con frecuencia a explicar detalles adicionales que podrían ser de utilidad aunque no estén directamente relacionados con lo que se está haciendo en el momento, además que todo se siente menos cuadriculado. Hace que sienta que aún estoy avanzando pero el nivel de esfuerzo cognitivo disminuyó.
😄
Utilicé la función aleatorio para la posición del mokepon enemigo, vi que en algunos aportes utilizaron el rango del aleatorio el mapa.width y el mapa.height pero en mi caso solo se movían en un rango muy chico y repetían muchas posiciones, me parece que tienen más movilidad definiendo los rangos del aleatorio.
let hipodogeEnemigo = new Mokepon("Hipodoge", "./assets/HIPODOGEF.png", 5, "💧", aleatorio(20, 620), aleatorio(20, 620))
let capipepoEnemigo = new Mokepon("Capipepo", "./assets/CAPIPEPOF.png", 5, "🌱", aleatorio(20, 620), aleatorio(20, 620))
let ratigueyaEnemigo = new Mokepon("Ratigueya", "./assets/RATIGUEYAF.png", 5, "🔥", aleatorio(20, 620), aleatorio(20, 620))
let langostelvisEnemigo = new Mokepon("Langostelvis", "./assets/LANGOSTELVISF.PNG", 5, "🔥", aleatorio(20, 620), aleatorio(20, 620))
let pydosEnemigo = new Mokepon("Pydos", "./assets/PYDOSF.png", 5, "💧", aleatorio(20, 620), aleatorio(20, 620))
let tucapalmaEnemigo = new Mokepon("Tucapalma", "./assets/TUCAPALMA.png", 5, "🌱", aleatorio(20, 620), aleatorio(20, 620))
Excelente clase. lo reproduzco a 0.85x, es bueno como se hace entender.
Gracias también los compañeros que hacen verdaderos aportes.
aún no estoy muy seguro de porque pero quería hacer un forEach para no volver a declarar a las mascotas enemigas, si no que usar las del propio arreglo de Mokepones y no me dejaba mostrar a la misma mascota que escogiera el jugador
mokepones.forEach(mokepon=>{
mokepon.pintarMokepon()
})
mi solución fue en la función seleccionarMascota() crear una variable enemiga y hacerle un push en el arreglo mokepones:
enemiga = new Mokepon(mascotaJugador.nombre,mascotaJugador.imagen,5,mascotaJugador.vida,mascotaJugador.mapaFoto.src)
enemiga.ataques = (mascotaJugador.ataques)
mokepones.push(enemiga)
Para no tener que volver a asignar todos los valores de los mokepones para los enemigos, uso una función que clona las instancias de una clase. Esto reduce el riesgo de errores, como por ejemplo, si cambiamos la ruta de la dirección de una de las imágenes, no hay necesidad de cambiarla tanto en el mokepón original como en el enemigo:
// Función auxiliar para clonar una instancia de una clase
function clonarClaseObjeto(obj){
return Object.assign(Object.create(Object.getPrototypeOf(obj)), obj);
}
// Creamos los mokepones enemigos
let hipodogeEnemigo = clonarClaseObjeto(hipodoge);
[hipodogeEnemigo.x, hipodogeEnemigo.y] = [80, 120];
let capipepoEnemigo = clonarClaseObjeto(capipepo);
[capipepoEnemigo.x, capipepoEnemigo.y] = [150, 95];
let ratigueyaEnemigo = clonarClaseObjeto(ratigueya);
[ratigueyaEnemigo.x, ratigueyaEnemigo.y] = [200, 190];
Aguante el Hipodosh!!
Estoy impresionado con la forma que se ha usado las coordenadas de los enemigos para usar el canvas. Es la primera vez que veo eso, espero seguir aprendiendo mas.
Cuando pedimos parámetros para una función podemos definirle un valor por defecto a sus parámetros.
ARRIBA DE MI MOTO ESTUDIO PAAA
Que confuso que hace y deshace su código. En lugar de que sea super estructurada la instructora como nos acostumbraron al principio…
EL ERROR DE LA CLASE 65 JAMÁS SE LOGRA ARREGLAR, ES UNA LASTIMA, VENÍA MUY ENTUSIASMADO, CABE RESALTAR QUE NISIQUIERA COPIANDO EL CODIGO DEJADO EN GITHUB, JAMÁS LO PENSÉ PERO AHORA PUNTO NEGATIVO PARA PLATZI.
Gracias por la clase.
Saludoss les cuento pueden colocar las cabezas de sus personajes diferentes a los que usan los profesores la manera en que lo hice fue hacer capture de pantalla al personaje que he usado en mi juego luego en la pagina de removebg extrae el fondo guarde la imagen en la carpeta donde estan las imagenes de mis personajes y siguiendo los pasos de la profesora se logran inicializar en mi canvas
hola vine aqui de nuevo repasando jajajaja por esta no pasé la prueba
genial!
T.T no subieron las imagenes también de tucapalma, pydos y langostelvis, me tocará desmontarlos T.T
Yo preferí, pintar todos los mokepones con un forEach:
mascotaJugadorObjeto.pintarMokepon()
mokepones.forEach((mokepon) => {
mokepon.pintarMokepon()
})
Y en el constructor puse esto para las coordenadas:
this.x= aleatorio(0, mapa.width-this.ancho),
this.y= aleatorio(0, mapa.height-this.alto),
Asi va quedando el proyecto, con un toque personal.
https://juancamilogomezalvarez.github.io/mokipon/
alguien mas se dio cuenta que el background es del Pokemon Rojo Fuego cuando vas al laboratorio del cientifico que se habia convertido en pokemon?
🔥🔥🔥
me aparece cuando elijo un personaje cuando le doy seleccionar en el mapa me aparece el que elegi muchas veces
y no que hacer llevo 1 hora tratando de repararlo
me preguntaba por que tambien funciona en diagonal al mover al mokepon, no encontre exolicacion, creanme no me ha dejado dormir 😃
que buena esta clase!!
es buen aporte para todos
¿Quieres ver más aportes, preguntas y respuestas de la comunidad?