Ir al contenido
Descargar

Objetos y eventos

Todo objeto del juego es una clase que hereda de brasa::Entity y se registra con BRASA_ENTITY. Sobrescribes solo los eventos que necesitas.

class Player : public brasa::Entity {
public:
void onSpawn() override { /* ... */ }
void onUpdate() override { /* ... */ }
};
BRASA_ENTITY(Player);

El nombre pasado a BRASA_ENTITY es el nombre del objeto en el editor.

Novo objeto (nuevo objeto) del editor crea dos archivos de código al lado de los datos del objeto:

  • el .hpp tiene la clase: los eventos que usa, los campos y las funciones;
  • el .cpp tiene el cuerpo de cada función y la línea BRASA_ENTITY.
Player.hpp
#pragma once
#include <brasa/brasa.hpp>
class Player : public brasa::Entity {
public:
BRASA_VARS(Player)
void onSpawn() override;
void onUpdate() override;
};
Player.cpp
#include "Player.hpp"
using namespace brasa;
void Player::onSpawn() { /* ... */ }
void Player::onUpdate() { /* ... */ }
BRASA_ENTITY(Player);
  • BRASA_VARS(Player) crea en la clase los campos de las variables hechas en el editor. Va justo después de public:.
  • Todo objeto ve a todos los demás sin #include: dentro de Player.cpp ya puedes escribir spawn<Bullet>(x, y, "Instancias").
  • La clase tiene que quedar fuera de namespace.

Un objeto con la clase entera dentro del .cpp, como en los proyectos de la 0.1, sigue funcionando. Solo que no recibe variables del editor.

Evento Cuándo se ejecuta
void onSpawn() Una vez, justo después de crearse la instancia, ya con x e y definidos. Úsalo en lugar del constructor.
void onUpdate() Una vez por paso (60 por segundo), después de los temporizadores.
void onPausedUpdate() Una vez por paso mientras el juego está en pausa (setPaused), en lugar del onUpdate. Mira Interfaz.
void onRender() Para dibujar la instancia. Por defecto llama a drawSelf(), que dibuja el sprite.
void onRenderGui() Para dibujar por encima de todo, sin cámara (marcador, menús).
void onDestroy() Cuando la instancia se elimina, al final del paso.
void onAnimationEnd() Cuando la animación del sprite completa una vuelta.

El orden dentro de un paso está en Orden del step.

Propiedad Tipo Qué es
x, y float Posición en el mundo (donde queda el origen del sprite). La y crece hacia abajo.
sprite std::string Nombre del sprite. "" = sin sprite y sin colisión.
frame float Cuadro actual de la animación, a partir de 0. Vuelve a 0 solo cuando se cambia el sprite.
animSpeed float Velocidad de la animación. Si el sprite tiene fps, es un multiplicador (1 = la velocidad del sprite). Sin fps, son cuadros por paso. Por defecto 1; 0 detiene la animación.
scaleX, scaleY float Escala del dibujo. -1 lo refleja.
angle float Rotación en grados, en sentido horario. Solo afecta al dibujo, no a la colisión.
depth int Orden de dibujo: mayor queda por detrás. Viene de la capa de la instancia.
visible bool false = no se llama a onRender ni a onRenderGui.
solid bool Lo tienen en cuenta placeFree y moveAndStop.
mask std::string Nombre de un sprite. Cuando está definido, la caja de colisión viene de él, y no del sprite actual.
flipX bool Espeja el dibujo y la caja de colisión en horizontal, sin tocar la escala.
persistent bool true = la instancia sobrevive al goTo y al restart. Mira Guardar datos entre rooms.

Velocidad, gravedad y fricción están en Movimiento.

Función Qué hace Ejemplo
void destroy() Marca la instancia para eliminarla al final del paso. Se puede llamar más de una vez. destroy();
bool isDestroyed() const true si ya se llamó a destroy(). if (isDestroyed()) return;
const std::string& objectName() const El nombre del objeto del proyecto del que vino esta instancia. if (objectName() == "Chefe") ...

Los valores definidos en el editor (sprite, visible, sólido, máscara, física y variables) ya están aplicados cuando se ejecuta el onSpawn.