JavaScript 遊戲開發:構建 2D 遊戲引擎


JavaScript 是一種用途廣泛的程式語言,可用於各種應用程式,包括遊戲開發。在本文中,我們將深入探討 JavaScript 遊戲開發的精彩世界,並探索構建 2D 遊戲引擎的過程。我們將提供帶解釋的程式碼示例,並展示其輸出,以幫助您更好地理解這些概念。因此,讓我們開始吧!

理解基礎知識

在我們開始構建遊戲引擎之前,讓我們先熟悉一些遊戲開發的基本概念。在 2D 遊戲中,我們通常會處理物件、精靈、遊戲迴圈和碰撞檢測。

  • 物件  物件表示我們遊戲中各種實體,例如玩家、敵人或障礙物。它們具有位置、大小和速度等屬性。

  • 精靈  精靈是物件的視覺表示。它們是影像或動畫,賦予遊戲元素生命。

  • 遊戲迴圈  遊戲迴圈是一個持續的過程,用於更新遊戲狀態並渲染圖形。它通常包括一個更新階段,我們在其中更新物件的位置和屬性,以及一個渲染階段,我們在其中繪製更新後的遊戲狀態。

  • 碰撞檢測  碰撞檢測確定兩個或多個物件是否相交。對於處理遊戲實體之間的互動至關重要。

構建 2D 遊戲引擎

現在我們瞭解了基礎知識,讓我們一步一步開始構建我們的 2D 遊戲引擎。我們將專注於建立一個簡單的遊戲引擎,該引擎處理物件管理、渲染和基本的碰撞檢測。

步驟 1:設定畫布

我們首先建立一個包含畫布元素的 HTML 檔案,該元素將作為遊戲的顯示區域。以下是一個示例 -

示例

<!DOCTYPE html>
<html>
<head>
   <title>2D Game Engine</title>
   <style>
      canvas {
         border: 1px solid #000;
      }
   </style>
</head>
<body>
   <canvas id="gameCanvas" width="800" height="600"></canvas>
   <script src="game.js"></script>
</body>
</html>

步驟 2:初始化遊戲引擎

在我們的 JavaScript 檔案(`game.js`)中,我們首先初始化遊戲引擎。我們設定畫布並獲取繪圖上下文以操作圖形。此外,我們定義一個數組來儲存遊戲物件。

// game.js

// Initialize the game engine
const canvas = document.getElementById('gameCanvas');
const ctx = canvas.getContext('2d');
const gameObjects = [];

步驟 3:建立 GameObject 類

接下來,我們定義一個 `GameObject` 類來表示遊戲實體。每個物件都將具有位置、大小和一個 `update` 方法,該方法將在遊戲迴圈期間呼叫。

// game.js

class GameObject {
   constructor(x, y, width, height) {
      this.x = x;
      this.y = y;
      this.width = width;
      this.height = height;
   }

   update() {
      // Update the game object
   }

   draw() {
      // Draw the game object
   }
}

步驟 4:將物件新增到遊戲中

現在,我們可以透過建立 `GameObject` 類的例項並將它們推送到 `gameObjects` 陣列中來將物件新增到遊戲中。例如,讓我們建立一個簡單的正方形物件 

// game.js

// Create a square object
const square = new GameObject(100, 100, 50, 50);

// Add the square object to the game
gameObjects.push(square);

步驟 5:實現遊戲迴圈

為了使我們的遊戲具有互動性,我們需要一個遊戲迴圈來持續更新和渲染遊戲物件。我們使用 `requestAnimationFrame` 函式來實現此目的。在遊戲迴圈中,我們呼叫每個遊戲物件的 `update` 和 `draw` 方法。

// game.js

function gameLoop() {
   // Clear the canvas
   ctx.clearRect(0, 0, canvas.width, canvas.height);

   // Update and draw each game object
   gameObjects.forEach(object => {
      object.update();
      object.draw();
   });

   // Call the game loop recursively
   requestAnimationFrame(gameLoop);
}

// Start the game loop
gameLoop();

步驟 6:繪製遊戲物件

現在,讓我們實現 `GameObject` 類的 `draw` 方法以在畫布上渲染物件。我們將使用 `fillRect` 方法為每個遊戲物件繪製一個矩形。

// game.js

class GameObject {
   // ...

   draw() {
      ctx.fillRect(this.x, this.y, this.width, this.height);
   }
}

步驟 7:更新遊戲物件

為了更新遊戲物件的位置和屬性,我們將實現 `GameObject` 類的 `update` 方法。為簡單起見,讓我們透過在每次更新時更改其 `x` 位置來移動正方形物件。

// game.js

class GameObject {
   // ...

   update() {
      this.x += 1; // Move the object by 1 pixel
   }
}

步驟 8:處理鍵盤輸入

為了使我們的遊戲具有互動性,我們可以處理鍵盤輸入來控制遊戲物件。我們將偵聽鍵盤按下事件並相應地更新物件的屬性。讓我們修改 `update` 方法以處理正方形物件的左右箭頭鍵 -

// game.js

class GameObject {
   // ...

   update() {
      if (keys['ArrowLeft']) {
         this.x -= 1; // Move left
      }

      if (keys['ArrowRight']) {
         this.x += 1; // Move right
      }
   }
}

// Keyboard input handling
const keys = {};

document.addEventListener('keydown', (event) => {
   keys[event.key] = true;
});

document.addEventListener('keyup', (event) => {
   keys[event.key] = false;
});

結論

您已成功使用 JavaScript 構建了一個簡單的 2D 遊戲引擎。我們探討了遊戲開發的基本概念,包括物件、精靈、遊戲迴圈和碰撞檢測。透過遵循分步過程並檢查帶解釋的程式碼示例,您現在應該對如何在 JavaScript 中建立基本遊戲引擎有了很好的瞭解。

從這裡,您可以透過新增更復雜的功能(例如碰撞檢測和響應、精靈動畫、音訊和使用者介面)來繼續擴充套件遊戲引擎的功能。

遊戲開發是一個廣闊而令人興奮的領域,JavaScript 為您釋放創造力並將遊戲創意變為現實提供了一個絕佳的平臺。

更新於:2023 年 7 月 25 日

965 次瀏覽

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告