Up to date

This page is up to date for Godot 4.2. If you still find outdated information, please open an issue.

Usando Area2D

Introducción

Godot ofrece una variedad de objetos de colisión para proveer detección y respuesta a colisiones. Tratar de decidir cuál usar para tu proyecto puede ser confuso. Puedes evitar problemas y simplificar el desarrollo si comprendes cómo funciona cada uno de ellos y cuáles son sus pros y contras. En este tutorial, veremos el nodo Area2D y mostraremos algunos ejemplos de cómo puede ser usado.

Nota

Este documento asume que los varios cuerpos físicos de Godot te son familiares. Por favor lee primero Introducción a la física.

¿Qué es un área?

Un Area2D determina una zona del espacio 2D. En este espacio puedes detectar otros nodos CollisionObject2D superpuestos, entrando, y saliendo. Las áreas además permiten sobrescribir localmente las propiedades físicas. Exploraremos cada una de esas funciones abajo.

Propiedades del área

Las áreas tienen muchas propiedades que puedes usar para personalizar su comportamiento.

../../_images/area2d_properties.webp

The Gravity, Linear Damp, and Angular Damp sections are used to configure the area's physics override behavior. We'll look at how to use those in the Area influence section below.

Monitoring and Monitorable are used to enable and disable the area.

The Audio Bus section allows you to override audio in the area, for example to apply an audio effect when the player moves through.

Note that Area2D extends CollisionObject2D, so it also provides properties inherited from that class. The Collision section of CollisionObject2D is where you configure the area's collision layer(s) and mask(s).

Detección de superposición

Quizás el uso más común de un nodo Area2D es para la detección de contactos y superposición. Cuando necesitas saber que dos objetos se han tocado, pero no necesitas una colisión física, puedes usar una área para que te notifique del contacto.

Por ejemplo, digamos que estamos haciendo una moneda para que el jugador la recoja. La moneda no es un objeto sólido - el jugador no puede pararse sobre ella o empujarla - nosotros solo queremos que esta desaparezca cuando el jugador la toque.

Aquí está la configuración del nodo para la moneda:

../../_images/area2d_coin_nodes.webp

To detect the overlap, we'll connect the appropriate signal on the Area2D. Which signal to use depends on the player's node type. If the player is another area, use area_entered. However, let's assume our player is a CharacterBody2D (and therefore a CollisionObject2D type), so we'll connect the body_entered signal.

Nota

Si no estás familiarizado con el uso de señales, mira Usando Señales para una introducción.

extends Area2D

func _on_coin_body_entered(body):
    queue_free()

¡Ahora nuestro jugador puede recolectar las monedas!

Otros ejemplos de uso:

  • Las áreas son excelentes para las balas y otros proyectiles que golpean y causan daño, pero que no necesitan ninguna otra física como el rebote.

  • Usar un área circular grande alrededor de un enemigo para definir su radio de "detección". Cuando el jugador está fuera del área, el enemigo no lo puede "ver".

  • "Cámaras de seguridad" - En un nivel grande con múltiples cámaras, agregar áreas a cada cámara y activarlas cuando el jugador entre.

Consulta Tu primer juego 2D para ver un ejemplo del uso de Area2D en un juego.

Influencia del área

The second major use for area nodes is to alter physics. By default, the area won't do this, but you can enable this with the Space Override property. When areas overlap, they are processed in Priority order (higher priority areas are processed first). There are four options for override:

  • Combine - El área añade sus valores a lo que se a calculado hasta el momento.

  • Replace - El área reemplaza las propiedades físicas, y las áreas con prioridad menor son ignoradas.

  • Combine-Replace - El área añade sus valores de gravedad/amortiguación a lo que se ha calculado hasta ahora (en orden de prioridad), ignorando cualquier área de menor prioridad.

  • Replace-Combine - El área reemplaza cualquier gravedad/amortiguación calculada hasta ahora, pero sigue calculando el resto de las áreas.

Usando estas propiedades, puedes crear comportamientos muy complejos con múltiples áreas superpuestas.

Las propiedades físicas que pueden ser sobrescritas son:

  • Gravity - La fuerza de gravedad dentro del área.

  • Gravity Direction - This vector does not need to be normalized.

  • Linear Damp - Que tan rápido los objetos dejan de moverse - la velocidad lineal perdida por segundo.

  • Angular Damp - Que tan rápido los objetos dejan de girar - velocidad angular perdida por segundo.

Punto de gravedad

The Gravity Point property allows you to create an "attractor". Gravity in the area will be calculated towards a point, given by the Point Center property. Values are relative to the Area2D, so for example using (0, 0) will attract objects to the center of the area.

Ejemplos

El proyecto de ejemplo adjunto abajo tiene tres áreas demostrando las físicas sobrescritas.

../../_images/area2d_override.gif

You can download this project here: area_2d_starter.zip