JavaScriptで作る2Dアクションゲーム入門|ジャンプ・移動・当たり判定の基本

アクションゲームの作り方

「ゲームを自分で動かしてみたい。けれど、開発環境の準備から難しそう…」と感じる人は多いです。

そこでこの記事では、特別なゲームエンジンを使わず、HTML・CSS・JavaScriptの3ファイルだけで作れるシンプルな2Dアクションゲームを題材に、基本の流れを整理していきます。

ブラウザさえあれば試せる内容なので、プログラミングの練習用としてもおすすめです。

この記事でわかること

  • HTML5キャンバスとJavaScriptでゲームを動かす基本構造
  • プレイヤーの移動・ジャンプ・重力・地面との当たり判定の考え方
  • requestAnimationFrame を使ったゲームループの組み立て方
  • サンプルコードをベースに機能を拡張するためのヒント
ゲーム開発講師
ゲーム開発講師

今回は「走ってジャンプするだけ」のミニゲームを題材に、2Dアクションの土台になる考え方を一通り確認していきましょう。

ゲーム制作をゼロから学びたいあなたへ
Unity入門の森を見る 初心者歓迎!動画×プロジェクト一式で本格ゲーム制作を学べる
ゲームを「遊ぶ側」から「作る側」へ

あなたのオリジナルゲーム、今年こそ完成させませんか?

RPG・アクション・ホラー…Unityで本格ゲームを作りたい人のための学習サイトです。

Unity入門の森|永久会員チケット

永久会員チケット|Unity入門の森

全講座ラインナップを見てみる

実際に完成するゲームを題材に、
ソースコード・素材・プロジェクト一式をすべて公開。
仕事や学校の合間の1〜2時間でも、
「写経→改造」で自分のゲームまで作りきれる環境です。

準備するものは3ファイルだけ|最小構成を確認しよう

まずは、どんなファイル構成でゲームを動かすのか整理しておきます。

今回のサンプルでは、次の3ファイルだけを同じフォルダに配置すればOKです。

ファイル名 役割 内容のイメージ
index.html 画面の土台 キャンバス要素を用意し、あとで書く JavaScript を読み込みます。
style.css 見た目・レイアウト キャンバスを中央に配置し、背景色や枠線などを整えます。
game.js ゲームの本体 プレイヤーの位置、重力、ジャンプ、キー入力、ゲームループなどを記述します。

フォルダ構成は次のようなイメージです。

  • すべて同じ階層に置くこと
  • ファイル名の綴りミスがあると読み込めないので要チェック
  • 最初はこの構成のまま触り、慣れてきたらサブフォルダで整理してもOK
ゲーム制作をゼロから学びたいあなたへ
Unity入門の森を見る 初心者歓迎!動画×プロジェクト一式で本格ゲーム制作を学べる

index.htmlを作る|キャンバスとスクリプトの入り口

続いて、ゲーム画面となるキャンバスと JavaScript ファイルの読み込み部分を用意します。

ここでは 800×600 ピクセルのキャンバスを1つだけ配置したシンプルなHTMLを使います。

サンプル:index.html

 


  • <canvas id="gameCanvas"> … ゲームを描くための領域
  • widthheight … キャンバスの解像度(今回は 800×600)
  • <script src="game.js"> … ゲームの処理を書いた JavaScript を読み込む

この段階ではまだ真っ白なキャンバスしか表示されませんが、ゲームの「入り口」は整いました。

style.cssを整える|キャンバスを画面中央に表示する

次に、キャンバスを画面中央に配置し、ゲーム画面らしい見た目に整えていきます。

最低限のレイアウトだけでも、デバッグ時の見やすさがだいぶ違ってきます。

サンプル:style.css

 

  • display: flex;justify-content / align-items でキャンバスを中央寄せ
  • height: 100vh; により、ブラウザの高さ全体をレイアウト対象にしている
  • #gameCanvas で枠線と背景色を指定し、ゲーム画面らしさを出している

ここまで設定すれば、ブラウザで index.html を開いたときに、水色のキャンバスが中央に表示されるはずです。

ゲーム制作をゼロから学びたいあなたへ
Unity入門の森を見る 初心者歓迎!動画×プロジェクト一式で本格ゲーム制作を学べる

game.jsの全体像を作る|ループとプレイヤー制御

最後に、ゲーム本体となる game.js を書いていきます。

ここでは、次の要素を1つのファイルにまとめます。

  • キャンバスと描画コンテキストの初期化
  • プレイヤーと地面のデータ
  • キー入力の管理
  • 描画処理(draw)
  • 更新処理(update)
  • ゲームループ(loop)

まずは全体のコードを通して眺め、そのあとで各パートを分解して見ていきましょう。

サンプル:game.js 全体コード

コード自体はそこまで長くありませんが、「状態を更新して描画する」ループになっている点が重要です。

各パートの役割を分解して理解する

ここからは、先ほどの game.js を部分ごとに確認していきます。

キャンバスとコンテキストの取得

canvas は HTML 側のキャンバス要素そのもの、ctx は「絵を描くためのペン」のようなイメージです。

この ctx を通して、四角形や画像、テキストなどを描画していきます。

プレイヤー・地面・物理パラメータ

  • 重力・ジャンプ力・移動速度は「後から調整しやすいように」定数として定義
  • プレイヤーは位置・大きさ・縦方向の速度・ジャンプ中かどうかを1つのオブジェクトで管理
  • 地面は「高さだけを持つシンプルな長方形」として扱っている

ゲームでは、このような「数字の集まり」が毎フレーム少しずつ変化していきます。

キー入力を押しっぱなしで判定する仕組み

キーが押された瞬間だけを見るのではなく、keys オブジェクトに「今押されているかどうか」を保存しておくスタイルです。

こうしておくと、更新処理の中で

 

という書き方で、現在の入力状態を毎フレーム参照できるようになります。

描画処理(draw)の役割

 

後から背景画像や敵キャラクターを追加する場合も、この中に『描く順番』を追記していくイメージです。

更新処理(update)で重力と当たり判定を実装する

 

 

重要ポイント

  • 位置そのものではなく「速度」を通してキャラクターを動かす
  • 地面にめり込んだら「位置を戻して速度を0」にするのがシンプル
  • ジャンプ中かどうかをフラグで管理して、空中連打による多段ジャンプを防ぐ

ゲームループ(loop)と requestAnimationFrame

 

requestAnimationFrame は「次の描画タイミングでこの関数を呼んでください」という指示です。

ブラウザ側がよきタイミングで loop を繰り返し実行してくれるため、おおよそ 60FPS 程度で

  • update … 数字(位置・速度・入力状態)を更新
  • draw … 更新された状態を画面に描き直す

というサイクルが続いていきます。

ゲーム制作をゼロから学びたいあなたへ
Unity入門の森を見る 初心者歓迎!動画×プロジェクト一式で本格ゲーム制作を学べる

ここまでの動作チェックリスト

コードを書き終えたら、ブラウザで index.html を開き、次のポイントを確認してみましょう。

項目 チェック内容
左右移動 左右キー or A / Dでプレイヤーがスムーズに左右へ動くか
ジャンプ スペース or W / ↑キーでジャンプし、空中連打で無限に飛べないか
重力 ジャンプ後に自然に落下しているか、ふわふわしすぎていないか
地面との接触 地面にしっかり乗り、めり込まずに止まるか
画面端 左右の端から外に出てしまわないか

⚠️ よくあるつまずき

  • キャンバスIDの綴りが違い、getContext が null になっている
  • ファイル名・パスのミスで game.js が読み込まれていない
  • 条件式の不等号(< と >)を逆にしてしまい、当たり判定が機能しない

動きが想定と違うときは、update() 内の処理順と条件を重点的に見直してみてください。

機能を広げるための発展アイデア

ここまでで「走る」「ジャンプする」「地面に立つ」という最低限のアクションは実装できました。

ここから少しずつ要素を増やしていくと、ぐっとゲームらしさが出てきます。

  • 足場ブロックの追加
    地面とは別に小さな四角形をいくつか用意し、同じように当たり判定を入れる。
  • 敵キャラクターの配置
    プレイヤーとは別のオブジェクトを動かして、触れたらゲームオーバーにする。
  • 画像の描画
    fillRect の代わりに drawImage を使い、キャラクター画像や背景画像に差し替える。
  • スコアや残機の追加
    右上にスコアを描いたり、残りライフを表示してゲーム性を高める。
ゲーム開発講師
ゲーム開発講師

一度に全部を盛り込もうとすると大変なので、「今日は足場だけ」「次はスコア表示」といった形で区切って進めるのがおすすめです。

ゲーム制作をゼロから学びたいあなたへ
Unity入門の森を見る 初心者歓迎!動画×プロジェクト一式で本格ゲーム制作を学べる
ゲームを「遊ぶ側」から「作る側」へ

あなたのオリジナルゲーム、今年こそ完成させませんか?

RPG・アクション・ホラー…Unityで本格ゲームを作りたい人のための学習サイトです。

Unity入門の森|永久会員チケット

永久会員チケット|Unity入門の森

全講座ラインナップを見てみる

実際に完成するゲームを題材に、
ソースコード・素材・プロジェクト一式をすべて公開。
仕事や学校の合間の1〜2時間でも、
「写経→改造」で自分のゲームまで作りきれる環境です。

まとめ

JavaScriptとHTML5キャンバスを使った2Dアクションゲームの基本的な作り方を見てきました。

この記事の要点

  • HTML・CSS・JavaScriptの3ファイルだけでシンプルな2Dアクションは十分作れる
  • キャラクターは「位置」と「速度」を分けて管理し、重力やジャンプを実装する
  • ゲームは「状態を更新 → 描画」をループさせる構造が基本
  • まずは地味でもよいので「1本動くもの」を完成させることが大切

今回の土台ができていれば、あとは敵やステージ、演出などを少しずつ追加していくだけで、オリジナルのアクションゲームへと育てていけます。

より本格的なゲーム制作に挑戦したくなったら、Unityなどのゲームエンジンでの2Dアクションにもステップアップしてみてください。考え方は共通している部分が多く、今回の経験が必ず活きてきます。

ゲーム制作をゼロから学びたいあなたへ
Unity入門の森を見る 初心者歓迎!動画×プロジェクト一式で本格ゲーム制作を学べる

コメント

タイトルとURLをコピーしました