Übersicht
Event-System
Leichtgewichtiger Pub/Sub EventEmitter, der in der gesamten Engine verwendet wird.
Die Engine enthält einen leichtgewichtigen EventEmitter für entkoppelte Kommunikation zwischen Systemen. Er wird intern für Resize-Events, Ressourcenlade-Fortschritt, Eingabe-Events und mehr verwendet — und steht auch für deine eigenen Spiel-Events zur Verfügung.
EventEmitter
import { EventEmitter } from '@mavonengine/core'
class MySystem extends EventEmitter {
doSomething() {
this.trigger('my-event', { value: 42 })
}
}
const system = new MySystem()
system.on('my-event', (data) => {
console.log(data.value) // 42
})
API
| Methode | Beschreibung |
|---|---|
on(event, callback) | Ein Event abonnieren |
trigger(event, data?) | Ein Event mit optionalen Daten auslösen |
EventEmitterMixin
Wenn du EventEmitter nicht direkt erweitern kannst (z.B. weil deine Klasse bereits etwas anderes erweitert), verwende den Mixin:
import { EventEmitterMixin, Actor } from '@mavonengine/core'
class MyActor extends EventEmitterMixin(Actor) {
doSomething() {
this.trigger('state-changed', { state: 'idle' })
}
}
Engine-Events
Verschiedene Engine-Systeme senden Events, die du abonnieren kannst:
Sizes (Fenster-Resize)
import { Game } from '@mavonengine/core'
const game = Game.instance()
game.sizes.on('resize', () => {
console.log(game.sizes.width, game.sizes.height)
})
Resources (Asset-Laden)
game.resources.on('progress', ({ loaded, total }) => {
console.log(`${loaded} / ${total} Assets geladen`)
})
game.resources.on('loaded', () => {
console.log('Alle Assets bereit')
})
InputManager (Tastatur)
game.input.on('keydown', (event) => { /* ... */ })
game.input.on('keyup', (event) => { /* ... */ })