[phaser3] Scene 호출하기

[phaser3] Scene 호출하기 updated_at: 2024-07-23 14:19

Scene 호출하기

앞선 내용을 간략히 구조화 하자면 아래와 같을 것이다.
여기서는 Scene이 호출되는 순서와 scene내부의 method의 호출 순서등에 대해 간략히 기술할 것입니다.

import * as Phaser from 'phaser';
import Scene1 from './phaser/Scene1';
import Scene2 from './phaser/Scene2';
import Scene3 from './phaser/Scene3';
..........
export class GameComponent implements OnInit, OnDestroy {
  private config = {
    .....
    scene: [ // 먼저 정의된 모든 Scene을 넣어둡니다. 
      Scene1,
      Scene2,
      Scene3,
      .....
    ],
  }

  ngOnInit() {
    this.game = new Phaser.Game(this.config);
    // 위와 같이 new로 정의하는 순간 this.config.scene 중에 제일 먼저 정의한 Scene1 을 불러옮니다.
  }

Scene 의 구조

Scene의 구조는 아래와 같습니다.
그리고 Scene이 호출될 때 실행되는 순서를 별도의 주석문으로 기술 하였습니다.

import * as Phaser from 'phaser';
..........
export default class Scene extends Phaser.Scene {

  constructor() { // 1 번째 자동 실행
    super('scenename'); // 이곳에 scene의 이름을 정의하여 나중에라도 이 scene만을 호출 할때 유용합니다.
  }

  init() { // 2 번째 자동 실행 (주로 환경 파일들을 초기화 한다.)
  }

  preload() { // 3 번째 자동 실행 (주로 게임에 필요한 assets을 불러온다)
  }

  create() { // 4 번째 자동 실행 (load된 asset을 게임 object로 변환한다.)
  }

  override update() { // 프로그램에서 object의 변화가 있을때 자동으로 display한다.
  }

}

위와 같이 처리하면 Scene1이 호출되고 constructor->init->preload->create->update 로 처리가 될 것입니다.

Scene 이동

만약 Scene이 완료된 후 Scene2를 호출하고 싶을 경우

this.game.scene.start('scene name', options); 

이렇게 하면 Scene1에서 [scene name]을 호출하는데 호출되는 Scene 에서는 init()로 부터 시작하게 됩니다.
물론 별도의 this.game.scene.start를 하지 않아도 어느 정도의 시간 후에는 scene에 정의된 다음단계로 넘어 갑니다. Scene2의 이름이 scene2이라면 아래와 같은 모습일 것입니다.

  • Scene1에서 Scene2 호출
this.game.scene.start('scene2', {row: 3, column: 3}); 
  • Scene2
init(o: any) {
  this.row = o.row;
  this.column = o.column;
}

// init 에서 수시한 parameter값을 이용하여 이후 프로그램 작성
preload() {
}

create() {

}

Scene 내의 함수 호출

new Phaser.Game() 을 호출후 외부에서 Phaser.Game내의 scene을 호출하는 방법 입니다.

this.game = new Phaser.Game(this.config);
this.game.scene.keys['gameKey'].shuffle();

위의 key는 아래의 key에 정의한 값이 됩니다.

export class Game extends Phaser.Scene {
 constructor() {
    super({
      key: 'main'
    });
  }
평점을 남겨주세요
평점 : 5.0
총 투표수 : 1

질문 및 답글