[Phaser] Scene이 아닌 곳에서 UPDATE 처리

천둥상어

·

2025. 3. 15. 09:45

반응형

엔진이나 그래픽 라이브러리에는 Tick 이벤트가 있다.

Tick 이벤트는 실시간으로 계속 호출되는 이벤트인데

엔진 라이브러리마다 명칭은 다르다.

 

Phaser의 경우 UPDATE란 이벤트명으로 사용하며

라이프 싸이클에 있는 update 함수가 해당 이벤트의 콜백 함수로 기능한다.

 

개발하는 결과물이 심플하고 간단한 것이라면
아마 Scene 클래스 하나로 모든 로직이 돌아갈 것이다.
그리고 실시간으로 돌아가는 코드가 필요하다면 
update 함수에 구현하면 된다.

 

하지만 모듈화가 이뤄지고 
객체들이 독자적인 클래스로 존재한다면?
Scene 클래스의 update 함수에 모두 구현하기에는
코드의 구조, 흐름, 관리 차원에서 좋지가 않다.

그래서 객체에서 UPDATE 이벤트를 사용하는 방법을 정리해 본다.

 

캡춰링을 통한 객체의 update

우선 각 객체에서 사용할 실시간 함수를 정의하고 Scene 클래스의 update 함수에서 호출 하는 방법이다.
Scene 클래스에서 상황에 따라 객체를 제어해야 한다면 유용하다.

import Phaser from 'phaser';

class FlatBoy extends Phaser.GameObjects.Container {
    constructor(scene: Phaser.Scene) {
        super(scene);
    }

    public update(): void {
        console.log('update');
    }
}

export class MyApp extends SceneX {

    private flatBoy: FlatBoy;

    constructor() {
        super({ key: 'MyApp' });
    }

    preload() {
    }

    create() {
        this.flatBoy = new FlatBoy(this);
    }

    update() {
        if (this.flatBoy) this.flatBoy.update();
    }
}

 

객체에 UPDATE 이벤트의 콜백 함수를 구현

다음은 객체에서 UPDATE 이벤트의 콜백 함수를 추가로 선언하는 방법이다.
종속되지 않고 독자적으로 실시간 처리해야 하는 객체라면 이 방법이 효율적이다.

class FlatBoy extends Phaser.GameObjects.Container {
    constructor(scene: Phaser.Scene) {
        super(scene);

        this.scene.events.on(Phaser.Scenes.Events.UPDATE, () => {
            console.log('update');
        });
    }
}

 

반응형

'프로그래밍 > Phaser' 카테고리의 다른 글

[Phaser] 트윈(Tween) 사용하기  (0) 2025.01.30