CursosEmpresasBlogLiveConfPrecios

¿Qué es canvas en JavaScript?

Clase 2 de 24 • Taller Práctico de JavaScript: ¡Crea tu Primer Videojuego!

Clase anteriorSiguiente clase

Contenido del curso

Introducción

  • 1
    Programemos un juego con JavaScript

    Programemos un juego con JavaScript

    17:13 min

Canvas

  • 2
    ¿Qué es canvas en JavaScript?

    ¿Qué es canvas en JavaScript?

    Viendo ahora
  • 3
    Tamaño del canvas y sus elementos

    Tamaño del canvas y sus elementos

    17:37 min
  • 4
    Canvas responsive

    Canvas responsive

    12:37 min

Mapa del juego

  • 5
    ¿Qué es un array bidimensional?

    ¿Qué es un array bidimensional?

    05:48 min
  • 6
    Arreglos multidimensionales en JavaScript

    Arreglos multidimensionales en JavaScript

    23:38 min
  • 7
    Refactor del mapa de juego

    Refactor del mapa de juego

    20:48 min

Movimientos del jugador

  • 8
    Eventos y botones

    Eventos y botones

    14:14 min
  • 9
    Objeto playerPosition

    Objeto playerPosition

    11:34 min
  • 10
    Limpieza de movimientos

    Limpieza de movimientos

    09:53 min
  • 11
    No te salgas del mapa

    No te salgas del mapa

    11:15 min

Colisiones

  • 12
    Detectando colisiones fijas

    Detectando colisiones fijas

    13:29 min
  • 13
    Detectando colisiones con arrays

    Detectando colisiones con arrays

    14:11 min
  • 14
    Victoria: subiendo de nivel

    Victoria: subiendo de nivel

    07:50 min
  • 15
    Derrota: perdiendo vidas

    Derrota: perdiendo vidas

    11:45 min

Bonus: adictividad

  • 16
    Sistema de vidas y corazones

    Sistema de vidas y corazones

    13:02 min
  • 17
    Sistema de tiempo y puntajes

    Sistema de tiempo y puntajes

    19:30 min
  • 18
    ¿Qué es localStorage?

    ¿Qué es localStorage?

    07:33 min
  • 19
    Guardando records del jugador

    Guardando records del jugador

    18:35 min

Deploy

  • 20
    Depurando errores del juego

    Depurando errores del juego

    23:16 min
  • 21
    Desplegando el juego a GitHub Pages

    Desplegando el juego a GitHub Pages

    07:39 min

Próximos pasos

  • 22
    Reto: reinicio del juego

    Reto: reinicio del juego

    03:36 min
  • 23
    Reto: timeouts de victoria o derrota

    Reto: timeouts de victoria o derrota

    04:14 min
  • 24
    ¿Quieres un simulador laboral?

    ¿Quieres un simulador laboral?

    06:53 min
Tomar examen

Escuelas

  • Desarrollo Web
    • Fundamentos del Desarrollo Web Profesional
    • Diseño y Desarrollo Frontend
    • Desarrollo Frontend con JavaScript
    • Desarrollo Frontend con Vue.js
    • Desarrollo Frontend con Angular
    • Desarrollo Frontend con React.js
    • Desarrollo Backend con Node.js
    • Desarrollo Backend con Python
    • Desarrollo Backend con Java
    • Desarrollo Backend con PHP
    • Desarrollo Backend con Ruby
    • Bases de Datos para Web
    • Seguridad Web & API
    • Testing Automatizado y QA para Web
    • Arquitecturas Web Modernas y Escalabilidad
    • DevOps y Cloud para Desarrolladores Web
  • English Academy
    • Inglés Básico A1
    • Inglés Básico A2
    • Inglés Intermedio B1
    • Inglés Intermedio Alto B2
    • Inglés Avanzado C1
    • Inglés para Propósitos Específicos
    • Inglés de Negocios
  • Marketing Digital
    • Fundamentos de Marketing Digital
    • Marketing de Contenidos y Redacción Persuasiva
    • SEO y Posicionamiento Web
    • Social Media Marketing y Community Management
    • Publicidad Digital y Paid Media
    • Analítica Digital y Optimización (CRO)
    • Estrategia de Marketing y Growth
    • Marketing de Marca y Comunicación Estratégica
    • Marketing para E-commerce
    • Marketing B2B
    • Inteligencia Artificial Aplicada al Marketing
    • Automatización del Marketing
    • Marca Personal y Marketing Freelance
    • Ventas y Experiencia del Cliente
    • Creación de Contenido para Redes Sociales
  • Inteligencia Artificial y Data Science
    • Fundamentos de Data Science y AI
    • Análisis y Visualización de Datos
    • Machine Learning y Deep Learning
    • Data Engineer
    • Inteligencia Artificial para la Productividad
    • Desarrollo de Aplicaciones con IA
    • AI Software Engineer
  • Ciberseguridad
    • Fundamentos de Ciberseguridad
    • Hacking Ético y Pentesting (Red Team)
    • Análisis de Malware e Ingeniería Forense
    • Seguridad Defensiva y Cumplimiento (Blue Team)
    • Ciberseguridad Estratégica
  • Liderazgo y Habilidades Blandas
    • Fundamentos de Habilidades Profesionales
    • Liderazgo y Gestión de Equipos
    • Comunicación Avanzada y Oratoria
    • Negociación y Resolución de Conflictos
    • Inteligencia Emocional y Autogestión
    • Productividad y Herramientas Digitales
    • Gestión de Proyectos y Metodologías Ágiles
    • Desarrollo de Carrera y Marca Personal
    • Diversidad, Inclusión y Entorno Laboral Saludable
    • Filosofía y Estrategia para Líderes
  • Diseño de Producto y UX
    • Fundamentos de Diseño UX/UI
    • Investigación de Usuarios (UX Research)
    • Arquitectura de Información y Usabilidad
    • Diseño de Interfaces y Prototipado (UI Design)
    • Sistemas de Diseño y DesignOps
    • Redacción UX (UX Writing)
    • Creatividad e Innovación en Diseño
    • Diseño Accesible e Inclusivo
    • Diseño Asistido por Inteligencia Artificial
    • Gestión de Producto y Liderazgo en Diseño
    • Diseño de Interacciones Emergentes (VUI/VR)
    • Desarrollo Web para Diseñadores
    • Diseño y Prototipado No-Code
  • Contenido Audiovisual
    • Fundamentos de Producción Audiovisual
    • Producción de Video para Plataformas Digitales
    • Producción de Audio y Podcast
    • Fotografía y Diseño Gráfico para Contenido Digital
    • Motion Graphics y Animación
    • Contenido Interactivo y Realidad Aumentada
    • Estrategia, Marketing y Monetización de Contenidos
  • Desarrollo Móvil
    • Fundamentos de Desarrollo Móvil
    • Desarrollo Nativo Android con Kotlin
    • Desarrollo Nativo iOS con Swift
    • Desarrollo Multiplataforma con React Native
    • Desarrollo Multiplataforma con Flutter
    • Arquitectura y Patrones de Diseño Móvil
    • Integración de APIs y Persistencia Móvil
    • Testing y Despliegue en Móvil
    • Diseño UX/UI para Móviles
  • Diseño Gráfico y Arte Digital
    • Fundamentos del Diseño Gráfico y Digital
    • Diseño de Identidad Visual y Branding
    • Ilustración Digital y Arte Conceptual
    • Diseño Editorial y de Empaques
    • Motion Graphics y Animación 3D
    • Diseño Gráfico Asistido por Inteligencia Artificial
    • Creatividad e Innovación en Diseño
  • Programación
    • Fundamentos de Programación e Ingeniería de Software
    • Herramientas de IA para el trabajo
    • Matemáticas para Programación
    • Programación con Python
    • Programación con JavaScript
    • Programación con TypeScript
    • Programación Orientada a Objetos con Java
    • Desarrollo con C# y .NET
    • Programación con PHP
    • Programación con Go y Rust
    • Programación Móvil con Swift y Kotlin
    • Programación con C y C++
    • Administración Básica de Servidores Linux
  • Negocios
    • Fundamentos de Negocios y Emprendimiento
    • Estrategia y Crecimiento Empresarial
    • Finanzas Personales y Corporativas
    • Inversión en Mercados Financieros
    • Ventas, CRM y Experiencia del Cliente
    • Operaciones, Logística y E-commerce
    • Gestión de Proyectos y Metodologías Ágiles
    • Aspectos Legales y Cumplimiento
    • Habilidades Directivas y Crecimiento Profesional
    • Diversidad e Inclusión en el Entorno Laboral
    • Herramientas Digitales y Automatización para Negocios
  • Blockchain y Web3
    • Fundamentos de Blockchain y Web3
    • Desarrollo de Smart Contracts y dApps
    • Finanzas Descentralizadas (DeFi)
    • NFTs y Economía de Creadores
    • Seguridad Blockchain
    • Ecosistemas Blockchain Alternativos (No-EVM)
    • Producto, Marketing y Legal en Web3
  • Recursos Humanos
    • Fundamentos y Cultura Organizacional en RRHH
    • Atracción y Selección de Talento
    • Cultura y Employee Experience
    • Gestión y Desarrollo de Talento
    • Desarrollo y Evaluación de Liderazgo
    • Diversidad, Equidad e Inclusión
    • AI y Automatización en Recursos Humanos
    • Tecnología y Automatización en RRHH
  • Finanzas e Inversiones
    • Fundamentos de Finanzas Personales y Corporativas
    • Análisis y Valoración Financiera
    • Inversión y Mercados de Capitales
    • Finanzas Descentralizadas (DeFi) y Criptoactivos
    • Finanzas y Estrategia para Startups
    • Inteligencia Artificial Aplicada a Finanzas
    • Domina Excel
    • Financial Analyst
    • Conseguir trabajo en Finanzas e Inversiones
  • Startups
    • Fundamentos y Validación de Ideas
    • Estrategia de Negocio y Product-Market Fit
    • Desarrollo de Producto y Operaciones Lean
    • Finanzas, Legal y Fundraising
    • Marketing, Ventas y Growth para Startups
    • Cultura, Talento y Liderazgo
    • Finanzas y Operaciones en Ecommerce
    • Startups Web3 y Blockchain
    • Startups con Impacto Social
    • Expansión y Ecosistema Startup
  • Cloud Computing y DevOps
    • Fundamentos de Cloud y DevOps
    • Administración de Servidores Linux
    • Contenerización y Orquestación
    • Infraestructura como Código (IaC) y CI/CD
    • Amazon Web Services
    • Microsoft Azure
    • Serverless y Observabilidad
    • Certificaciones Cloud (Preparación)
    • Plataforma Cloud GCP

Platzi y comunidad

  • Platzi Business
  • Live Classes
  • Lanzamientos
  • Executive Program
  • Trabaja con nosotros
  • Podcast

Recursos

  • Manual de Marca

Soporte

  • Preguntas Frecuentes
  • Contáctanos

Legal

  • Términos y Condiciones
  • Privacidad
  • Tyc promociones
Reconocimientos
Reconocimientos
Logo reconocimientoTop 40 Mejores EdTech del mundo · 2024
Logo reconocimientoPrimera Startup Latina admitida en YC · 2014
Logo reconocimientoPrimera Startup EdTech · 2018
Logo reconocimientoCEO Ganador Medalla por la Educación T4 & HP · 2024
Logo reconocimientoCEO Mejor Emprendedor del año · 2024
De LATAM conpara el mundo
YoutubeInstagramLinkedInTikTokFacebookX (Twitter)Threads
      Angel David Velasco Bonifaz

      Angel David Velasco Bonifaz

      student•
      hace 3 años
        Gilberto Santamaria

        Gilberto Santamaria

        student•
        hace 2 años
      Marcelo Garro

      Marcelo Garro

      student•
      hace 3 años
        Federico Maidana

        Federico Maidana

        student•
        hace 3 años
        Oscar Israel Román Quispe

        Oscar Israel Román Quispe

        student•
        hace 3 años
      Gualberto Montiel

      Gualberto Montiel

      student•
      hace 3 años
      Joselyne Ivanny Coello Moreira

      Joselyne Ivanny Coello Moreira

      student•
      hace 3 años
      Juan Pablo Soto Velasco

      Juan Pablo Soto Velasco

      student•
      hace 3 años
      Raúl Adolfo Sánchez Rodríguez

      Raúl Adolfo Sánchez Rodríguez

      student•
      hace 3 años
        Federico Ivan Llano

        Federico Ivan Llano

        student•
        hace 3 años
      Juan David Reyes

      Juan David Reyes

      student•
      hace 3 años
        Juan David Reyes

        Juan David Reyes

        student•
        hace 3 años
        Yordy Leonardo Almonte Ruiz

        Yordy Leonardo Almonte Ruiz

        student•
        hace 3 años
      Eduardo Nila

      Eduardo Nila

      student•
      hace 3 años
        Josue Cerron Tuesta

        Josue Cerron Tuesta

        student•
        hace 3 años
      Javier Núñez

      Javier Núñez

      student•
      hace 3 años
      Jorge Méndez Ortega

      Jorge Méndez Ortega

      student•
      hace 3 años
        Federico Maidana

        Federico Maidana

        student•
        hace 3 años
      Alejandro Ramos

      Alejandro Ramos

      student•
      hace 3 años
      Raúl Adolfo Sánchez Rodríguez

      Raúl Adolfo Sánchez Rodríguez

      student•
      hace 3 años
      Fabian Camilo Huertas Suarez

      Fabian Camilo Huertas Suarez

      student•
      hace 2 años
      Luis Miguel Rodriguez

      Luis Miguel Rodriguez

      student•
      hace 3 años
      Uriel Solis Salinas

      Uriel Solis Salinas

      student•
      hace 3 años
      Axel Enrique Galeed Gutierrez

      Axel Enrique Galeed Gutierrez

      student•
      hace 3 años
      César Augusto Cortés Labrada

      César Augusto Cortés Labrada

      student•
      hace 3 años
      Valentin moronta

      Valentin moronta

      student•
      hace 3 años
        Kevin J. Zea Alvarado

        Kevin J. Zea Alvarado

        student•
        hace 3 años
        Valentin moronta

        Valentin moronta

        student•
        hace 3 años
      Gerardo Garduño Rosas

      Gerardo Garduño Rosas

      student•
      hace 3 años
        Juan Pablo Soto Velasco

        Juan Pablo Soto Velasco

        student•
        hace 3 años
        Gerardo Garduño Rosas

        Gerardo Garduño Rosas

        student•
        hace 3 años
      Ricardo Alfonso Chavez Vilcapoma

      Ricardo Alfonso Chavez Vilcapoma

      student•
      hace 3 años

      fillRect() no recibe 4 coordenadas, recibe 2 coordenadas, que son apartir de donde inicia a dibujar, y luego el ancho y el alto.

      fillRect( xinicial, yinicial, width, height)

      Importante aporte !

      Para los que no les sale el auto completado de los métodos del canvas, les puedo compartir un consejo para no cometer errores de tipados con frecuencia.

      /** * @type {HTMLCanvasElement} */ const canvas = document.querySelector("#game");

      En realidad lo que hace es decir que nuestra constante "canvas" es de tipo HTMLCanvasElement, lo que nos mostrara los métodos en VSCode.

      Screenshot 2023-02-11 182140.png

      Buen dato

      Exceelente, me funcionó, ¡muchas gracias!

      Aqui algunos metodos de HTML5 Canvas:

      !Metodos Canvas

      Screenshot 2023-03-10 125916.png
      function startGame(){ game.fillRect(100,25,100,100); game.clearRect(125,50,50,50); game.fillText('PLATZI', 133,78); }

      Qué buena energía tiene el profesor! Vamos bien.

      Recordatorio de eje x (horizontal) y eje y (vertical)

      ClaseX-Y.png

      Se confundio en eso? porque para mi siempre el eje horizontal fue x y vertical el Y. Al principio siempre me lo confundia, pero recuerdo que en Unity 2d se usa para hacer saltar un personaje modificando el eje Y.

      ¿Qué es canvas en JavaScript?

      Lo primero que necesitamos es el elemento de HTML donde vamos a renderizar el canvas, canvas nos sirve para renderizar gráficos 2D.

      Como condición también tenemos que crear un contexto que es donde le decimos a canvas que queremos renderizar gráficos en 2d lo hacemos así

      const game = canvas.getContext('2d');

      Ahora la variable game ya tiene las propiedades para que usemos canvas, es recomendable usar canvas una vez el HTML se ha renderizado, por eso podemos usar un escuchador de eventos en el HTML para saber cuando se cargo y poder desde ese punto usar canvas.

      fillRect()

      Con este definimos el lugar donde va a iniciar nuestro trazo o figura geométrica, recibe 4 parámetros

      game.fillRect(0,0,0,0);
      • El primer parámetro es el eje X donde inicia nuestro trazo.
      • El segundo parámetro es el eje Y.
      • El tercer parámetro es la medida de nuestro trazo o figura, es decir hasta dónde va a llegar y esta medida en en WITH o ancho.
      • El tercer parámetro también nos sirve para añadir medidas al trazo y esta medida es en HEIGTH o alto.

      clearRect()

      Este nos sirve especialmente para borrar, esta función también recibe 4 parámetros y son los mismos antes mencionados, en este caso tenemos un borrado de la posición en Y y en X que le demos y los últimos 2 parámetros el grosor del borrado.

      game.clearRect(0,0,50,50);

      fillText()

      Este nos permite insertar texto, cuando usemos esta propiedad es necesario que no solo le pasemos el texto sino también las propiedades para poderlo alinear.

      game.fillText('setso', 100,100);

      Dando estilos a nuestro texto

      Para dar estilos tenemos algunas propiedades como

      • font
      • fillStyle

      Su sintaxis es así, es un poco diferente a las otras por qué no son un método.

      Con la propiedad font podemos añadir todos los estilos correspondientes a un texto como el tamaño o su tipografía.

      game.font = '25px verdana';

      Con fillStyle ya podemos darle otros estilos como el color

      game.fillStyle = 'purple';

      textAling()

      Cómo su nombre lo dice es para poder alinear el texto, tenemos diferentes propiedades como:

      • Center
      • start
      • end
      • right
      • left
      game.textAling = 'rigth';

      ufff, buenisimo tu aporte hermano, estas notas siempre me ayudan muchisimo a la hora de centralizar el tema aprendido en la clase actual ya sea para dejar notas, hacer commits, sintetizar info, en fin lo que sea que te ayude a crear un resumen de lo que trato la clase

      Me parece interesante las funciones que existen en canvas , espero poder aprender mas de ellas

      Con canvas se pueden hacer muchas cosas!

      Existen mas métodos o funciones para "dibujar" en canvas, una de ellas es:

      strokeReact(x, y, width, height);

      La cual nos permite dibujar un contorno.

      Acá puedes ver algunas funciones más: https://developer.mozilla.org/es/docs/Web/API/Canvas_API/Tutorial/Drawing_shapes

      Para este caso me gusta más utilizar

      document.onreadystatechange = () => { const { readyState = "" } = document; if (readyState === "complete") { // Me gusta utilizar el $ siempre que hago referencia a un elemento del DOM lo considero como una buena práctica ya que facilita la lectura del código const $CANVAS = document.querySelector("#game"); const CONTEXT = $CANVAS.getContext("2d"); CONTEXT.fillRect(0, 0, 100, 100); // en esta parte se cargaría la función a utilizar } };

      Genial, no conocía esta propiedad

      Lo de textAlign ta interesante el como ajusta el texto

      Método fillRect( )

      • Aprende sobre este método de la interface Canvas Rendering Context 2D:

        fillRect().png

      • Resumen de WEB APIs

        WEB APIS.png

      Ahi vamos 😃

      juego.PNG

      function startGame () { game.fillStyle = 'brown'; game.fillRect(100,25,100,100); game.clearRect(125,50,50,50); game.font = '16px Verdana'; game.fillStyle = "blue"; game.fillText('HOLI!', 128, 78); }

      algunos métodos de Canvas que puedes usar para crear y manipular elementos en el canvas:

      1. getContext(): Este método se utiliza para obtener el contexto de dibujo del canvas. El contexto de dibujo es un objeto que proporciona métodos y propiedades para dibujar en el canvas. El contexto se puede obtener en dos modos, 2D y 3D, y se puede llamar al método getContext() con el parámetro "2d" o "webgl" para obtener el contexto de dibujo correspondiente.
      2. fillRect(): Este método se utiliza para dibujar un rectángulo relleno en el canvas. El método toma cuatro argumentos: la posición x del rectángulo, la posición y del rectángulo, el ancho del rectángulo y la altura del rectángulo.
      3. strokeRect(): Este método se utiliza para dibujar un rectángulo con borde en el canvas. El método toma cuatro argumentos: la posición x del rectángulo, la posición y del rectángulo, el ancho del rectángulo y la altura del rectángulo.
      4. clearRect(): Este método se utiliza para borrar un área rectangular del canvas. El método toma cuatro argumentos: la posición x del área rectangular, la posición y del área rectangular, el ancho del área rectangular y la altura del área rectangular.
      5. beginPath(): Este método se utiliza para comenzar una nueva ruta de dibujo en el canvas. Los métodos moveTo() y lineTo() se utilizan a menudo después de este método para definir la ruta de dibujo.
      6. beginPath(): Este método se utiliza para comenzar una nueva ruta de dibujo en el canvas. Los métodos moveTo() y lineTo() se utilizan a menudo después de este método para definir la ruta de dibujo.
      7. moveTo(): Este método se utiliza para mover el cursor a una posición especificada en el canvas sin dibujar.
      8. lineTo(): Este método se utiliza para dibujar una línea desde la posición actual del cursor hasta una posición especificada en el canvas.
      9. stroke(): Este método se utiliza para dibujar la ruta de dibujo en el canvas con un borde.
      10. fill(): Este método se utiliza para dibujar la ruta de dibujo en el canvas rellenando la forma.
      11. arc(): Este método se utiliza para dibujar un arco en el canvas. El método toma seis argumentos: la posición x del centro del arco, la posición y del centro del arco, el radio del arco, el ángulo inicial del arco, el ángulo final del arco y la dirección del arco (opcional).

      Si a alguien le sirven mis apuntes:

      /* === Métodos del canvas === */ game.fillRect(0,0,100,100); /* Lugar donde inicia el trazo. */ game.clearRect(0,0,50,50); /* Sirve como borrador para alguna parte del canvas. */ game.font = "25px Verdana"; /* Tamaño que tendrá el texto del fillText y tipo de fuente.*/ game.fillStyle = "Purple"; /* Nos permite añadir estilos CSS al fillText.*/ game.textAlign = "end"; /* Posición del texto, donde comienza o donde termina respecto a la posición X y Y. */ game.fillText("Uriel", 70, 70); /* Nos permite insertar texto dentro del canvas.*/

      Les comparto mis apuntes. :D

      CanvasRenderingContext2D.fillRect()

      Con fillRect() podemos crear un cuadrado que parte desde un punto $X_i$ e $Y_i$, además, le podemos agregarle un ancho y un alto.

      Sintaxis

      CanvasRenderingContext2D.fillRect(Xi, Yi, WIDTH, HEIGHT);

      CanvasRenderingContext2D.clearRect()

      Contienen los mismos parámetros de fillRect(), solo que clearRect() se encarga de borrar lo que hayamos dibujado con fillRect().

      Sintaxis

      CanvasRenderingContext2D.clearRect(Xi, Yi, WIDTH, HEIGHT);

      CanvasRenderingContext2D.fillText()

      Con fillText() nos permite insertar un texto y para esto tenemos que darles las coordenadas de donde queremos insertar dicho texto.

      Sintaxis

      CanvasRenderingContext2D.fillText('Text', X, Y, maxWidth?);

      CanvasRenderingContext2D.fillStyle

      Con fillStyle, lo tratamos como un valor, nos permite agregarle estilis a nuestro texto.

      Value

      One of the following:

      • A string parsed as CSS <color> value.
      • A CanvasGradient object (a linear or radial gradient).
      • A CanvasPattern object (a repeating image).

      Sintaxis

      CanvasRenderingContext2D.fillStyle = value;

      CanvasRenderingContext2D.font

      Con font, lo tratamos como un valor, nos permite definir la funte de nuestro texto.

      Sintaxis

      CanvasRenderingContext2D.font **= '**font-size family-font font-variant font-weight**';**

      Más sobre .

      ****

      Nos permite alinear el texto, teniendo como referencia a los ejes X e Y.

      Value

      Possible values:

      "left"The text is left-aligned.

      "right"The text is right-aligned.

      "center"The text is centered.

      "start"The text is aligned at the normal start of the line (left-aligned for left-to-right locales, right-aligned for right-to-left locales).

      "end"The text is aligned at the normal end of the line (right-aligned for left-to-right locales, left-aligned for right-to-left locales).

      The default value is "start". Imagen de @Guadalupe Monge Barale en Platzi.

      https://static.platzi.com/media/user_upload/text-788330e4-177b-444f-9911-661f51758139.jpg

      Sintaxis

      = value;

      Esto me recuerda que dejé abandonado el proyecto de la pizarra del curso básico de programación XD. Luego de aprender más sobre canvas en este curso seguro tendré mejores ideas para agregarle a ese otro proyecto.

      Hola tengo un problema con el getContext ya me me salta un error: Uncaught TypeError: Cannot read properties of null (reading 'getContext') / este para ser mas expesifico, alguien sabe como resolverlo??

      Hola, Valentin. 👋 Ese error suele aparecer porque no se está llamando correctamente al id del elemento. Asegúrate de que sean exactamente el mismo, incluyendo mayúsculas y minúsculas.

      Si sigue sin funcionar, comparte tu código HTML y JavaScript.

      Hola, nono aun no funciona no era el id ya lo mire, ahi te dejo el codigo:

      <div class="game-container"> <!-- canvas de iteracion --> <canvas id="game"></canvas> <!-- botones --> <div class="btns"> <button id="up">Arriba</button> <button id="left">Izquierda</button> <button id="right">Derecha</button> <button id="down">Abajo</button> </div> <!-- texto extra del juego --> <div class="messages"> <p>Parrrafo de ejemplo</p> </div> </div> Y por aca el JS const canvas = document.querySelector('#game'); const game = canvas.getContext('2d'); window.addEventListener('load',starGame); function starGame() { game.fillRect(0,0,100,100); }

      yo tengo un problema cuando cargo dentro de la pagina el getContext me marca any y me manda un error en el navegador

      Connot read properties of hull ( reading getContext)

      Qué raro, ¿podrías compartir tu código para ver qué podría ser?

      const canvas = document.querySelector('canvas'); const ctx = canvas.getContext('2d');

      Ojito que antes de dibujar cualquier cosa en el canvas, se tienen que agregar los estilos correspondientes...sino no va a reconocer la figura los estilos.

      orden ojo.PNG
      orden ojo 2.PNG