Ir al contenido
Descargar

Handles

Los punteros como Enemy*, devueltos por spawn, findAt y closest, valen solo dentro del paso actual. Si la instancia se destruye, el puntero guardado pasa a apuntar a basura, y usarlo hace que el juego se caiga.

Un handle es una referencia segura: cuando la instancia desaparece, simplemente queda vacío.

class Turret : public brasa::Entity {
public:
void onSpawn() override {
if (Player* p = closest<Player>()) target_ = p->handle<Player>();
}
void onUpdate() override {
if (Player* p = target_.get()) { // nullptr si el jugador fue destruido
angle = -angleTo(*p);
}
}
private:
brasa::Handle<Player> target_;
};
Función Qué hace
Handle<T> handle<T>() const Crea un handle para esta instancia.
T* get() const La instancia, o nullptr si ya fue destruida.
if (handle) El handle vale true mientras la instancia existe.

La cámara usa handles para seguir a una instancia: scene().camera.follow(handle());.