[javascript] Phaser의 다양한 기능과 API

Phaser는 HTML5 기반의 게임 개발 프레임워크로, 다양한 기능과 API를 제공하여 게임 개발을 보다 간편하고 효율적으로 할 수 있도록 도와줍니다. 이번 글에서는 Phaser의 주요 기능과 API를 살펴보겠습니다.

게임 객체와 씬

Phaser는 게임을 구성하는 다양한 객체를 생성하고 관리할 수 있는 기능을 제공합니다. Phaser.GameObject 클래스를 상속하여 직접 객체를 생성하거나, 이미 구현된 객체 클래스를 사용할 수 있습니다. 게임 객체는 씬(Scene)에 속해 있으며, 서로 다른 씬 사이를 전환하거나 여러 씬을 병렬로 실행할 수 있습니다. Phaser.Scene 클래스를 상속하여 씬을 구현하고, Phaser.Game 클래스의 scene 메서드를 사용하여 씬을 추가할 수 있습니다.

// Game 객체 생성
var config = {
  width: 800,
  height: 600,
  scene: [Scene1, Scene2] // 여러 씬을 배열로 전달하면 병렬로 실행됨
};
var game = new Phaser.Game(config);

// Scene 객체 구현
class Scene1 extends Phaser.Scene {
  constructor() {
    super({ key: 'scene1' });
  }
}

class Scene2 extends Phaser.Scene {
  constructor() {
    super({ key: 'scene2' });
  }
}

키보드 및 마우스 입력 처리

Phaser는 키보드 및 마우스 입력을 쉽게 처리할 수 있는 API를 제공합니다. Phaser.Input.Keyboard 클래스를 사용하여 키 입력을 감지하고, Phaser.Input.Mouse 클래스를 사용하여 마우스 입력을 감지할 수 있습니다. 이를 활용하여 플레이어 조작 등을 구현할 수 있습니다.

// 키 입력 처리 예시
var keyboard = this.input.keyboard;
if (keyboard.isDown(Phaser.Input.Keyboard.KeyCodes.LEFT)) {
  // 왼쪽 키를 누를 때 실행할 코드
}
if (keyboard.isDown(Phaser.Input.Keyboard.KeyCodes.RIGHT)) {
  // 오른쪽 키를 누를 때 실행할 코드
}

// 마우스 입력 처리 예시
var mouse = this.input.mouse;
if (mouse.buttons === 1) {
  // 마우스 왼쪽 버튼을 클릭할 때 실행할 코드
}
if (mouse.buttons === 2) {
  // 마우스 오른쪽 버튼을 클릭할 때 실행할 코드
}

애니메이션과 Tween

Phaser는 애니메이션 처리를 위한 강력한 기능을 제공합니다. Phaser.Animation 클래스를 사용하여 애니메이션을 생성하고, Phaser.Tween 클래스를 사용하여 속성의 변화를 부드럽게 처리할 수 있습니다.

// 애니메이션 구현 예시
var config = {
  key: 'walk',
  frames: this.anims.generateFrameNumbers('character', { start: 0, end: 3 }),
  frameRate: 10,
  repeat: -1 // 반복 실행
};
this.anims.create(config);
this.add.sprite(400, 300, 'character').play('walk');

// Tween 구현 예시
this.tweens.add({
  targets: sprite,
  x: 600,
  y: 400,
  duration: 2000,
  ease: 'Power2',
  yoyo: true, // 앞뒤로 반복
  repeat: -1 // 무한 반복
});

충돌 감지

Phaser는 충돌 감지를 쉽게 처리할 수 있는 기능을 제공합니다. Phaser.Physics 클래스를 사용하여 충돌이 필요한 객체를 등록하고, Phaser.Physics.Arcade 클래스의 메서드를 사용하여 충돌을 감지할 수 있습니다.

// 충돌 감지 예시
this.physics.add.collider(player, enemy, hitEnemy);
this.physics.add.overlap(bullet, enemyGroup, hitEnemy);

function hitEnemy() {
  // 충돌 처리
}

참고 자료