Atom Engine

Interfejsy IUpdatable i IRenderable

Cel

Te interfejsy definiują minimalny kontrakt dla obiektów uczestniczących w symulacji czasu rzeczywistego lub pętli gry.

Są powszechnie używane w silnikach gier, symulacjach lub architekturach typu ECS.

Cykl życia

Creation → Update → Destruction

  1. Creation: Obiekty są tworzone i rejestrowane w systemie aktualizacji/renderowania.
  2. Update: Każda klatka lub tick, wywoływane jest update(dt) w celu aktualizacji stanu symulacji.
  3. Render: Każda klatka, wywoływane jest render(alpha) w celu narysowania bieżącego (lub interpolowanego) stanu.
  4. Destruction: Obiekty są usuwane z systemów i nie są już aktualizowane ani renderowane.

Publiczne API

IUpdatable

IRenderable

Wewnętrzne zachowanie

Implementacje zazwyczaj oddzielają logikę symulacji od logiki renderowania:

To rozdzielenie pomaga utrzymać deterministyczną symulację przy jednoczesnym zapewnieniu płynnych efektów wizualnych.

Przykład

class Player implements IUpdatable, IRenderable {
    position = { x: 0, y: 0 };
    previousPosition = { x: 0, y: 0 };
    velocity = { x: 10, y: 0 };

    update(dt: number): void {
        this.previousPosition = { ...this.position };
        this.position.x += this.velocity.x * dt;
        this.position.y += this.velocity.y * dt;
    }

    render(alpha: number): void {
        const x = this.previousPosition.x +
            (this.position.x - this.previousPosition.x) * alpha;

        const y = this.previousPosition.y +
            (this.position.y - this.previousPosition.y) * alpha;

        drawCircle(x, y, 10);
    }
}

Powiązane elementy