[javascript] Phaser를 사용하여 물리 엔진 구현하기

물리 엔진은 게임 개발에서 중요한 역할을 합니다. 충돌, 중력, 운동 등 게임 객체의 물리적인 동작을 시뮬레이션합니다.

Phaser는 HTML5 기반의 게임 개발 프레임워크로, 물리 엔진을 손쉽게 구현할 수 있습니다. 이번 글에서는 Phaser를 사용하여 물리 엔진을 구현하는 방법에 대해 알아보겠습니다.

1. Phaser 설치 및 프로젝트 설정

먼저, Node.js가 설치되어 있어야 합니다. Node.js가 설치되어 있다면, 아래의 명령을 통해 Phaser를 설치합니다.

npm install phaser

설치가 완료되면, 새로운 프로젝트 폴더를 생성하고 index.html 파일을 작성합니다. 아래와 같이 <canvas> 요소를 추가합니다.

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <title>Phaser 물리 엔진</title>
  </head>
  <body>
    <script src="phaser.js"></script>
    <script src="game.js"></script>
  </body>
</html>

그리고 game.js 파일을 생성하고 아래의 코드를 작성합니다.

var config = {
  type: Phaser.AUTO,
  width: 800,
  height: 600,
  physics: {
    default: 'arcade',
    arcade: {
      gravity: { y: 200 }
    }
  },
  scene: {
    preload: preload,
    create: create
  }
};

var game = new Phaser.Game(config);

function preload() {
  // 이미지, 스프라이트시트 등을 미리 로드하는 함수
}

function create() {
  // 게임 객체들을 생성하고 초기화하는 함수
}

2. 객체 생성과 물리 엔진 적용

create 함수에서 객체를 생성하고 물리 엔진을 적용할 수 있습니다. 아래는 사각형과 원을 생성하고 물리 엔진을 적용하는 코드입니다.

function create() {
  var rectangle = this.add.rectangle(400, 300, 100, 100, 0xff0000);
  this.physics.add.existing(rectangle);

  var circle = this.add.circle(200, 300, 50, 0x00ff00);
  this.physics.add.existing(circle);
}

위 코드에서 add.rectangleadd.circle 함수를 사용하여 사각형과 원을 생성합니다. 그리고 physics.add.existing 함수를 사용하여 해당 객체에 물리 엔진을 적용합니다.

3. 충돌 감지 및 중력 적용

물리 엔진을 사용하면 객체 간의 충돌을 감지할 수 있으며, 중력을 적용할 수도 있습니다. 아래는 create 함수에서 충돌 감지 및 중력을 적용하는 예시입니다.

function create() {
  // ...

  rectangle.setCollideWorldBounds(true);
  circle.setCollideWorldBounds(true);

  this.physics.add.collider(rectangle, circle, function() {
    console.log("Collision detected!");
  });

  // ...
}

위 코드에서 setCollideWorldBounds 함수를 사용하여 객체들이 화면 경계에 충돌하게 만듭니다. 또한 add.collider 함수를 사용하여 사각형과 원이 충돌할 경우 콜백 함수가 실행되도록 설정했습니다.

4. 추가적인 설정 및 기능

물리 엔진을 더욱 세부적으로 조정하고 추가 기능을 사용하려면 Phaser의 문서를 참조하세요. Phaser에는 다양한 물리 옵션과 기능이 포함되어 있으며, 필요에 따라 이를 활용할 수 있습니다.

참고 문서