2D横スクロールアクションゲーム制作

2018年8月28日

ゲーム制作2作品目はJavaFXでのゲーム制作とライブラリの動作を確認、修正するために、障害物を避けるだけのシンプルなアクションゲームを作成していきたいと思います。

今回も前回の的当てゲームと同じく、ウォーミングアップの一貫として進めたいと思います。ただ、横スクロール2Dアクションゲームの要素を少し盛り込むつもりですので、前回の的当てゲームよりは少し難易度が上がりそうです。

今回使用するツール類は下記です。
・Java9(プログラム制作。JavaFX中心)
・Eclipse(Java統合開発環境)
・Aseprite(グラフィック制作)
・Gimp(グラフィック制作)
・Studio One Prime(BGM制作と効果音)
・Audacity(音声データ加工用)

効果音は必要であれば自分で用意し、ネット上にいい素材があればそれを利用します。

使用ライブラリ
Ver1.00版nompor-lib-alpha-1.1.2.jar
Ver1.10版nompor-lib-alpha-1.1.3.jar

今回も制作したものからgithubへアップロードしていきます。

このゲームの最終完成版はふりーむに投稿しておきましたので、プレイしていただけます。しょぼいですがアクションゲームっぽくはなったでしょう。



1.大まかな仕様決め

今回のゲーム仕様もそこまで複雑なものではなく、簡単なものにします。

現時点で考えている仕様は2D横スクロールアクションゲーム形式で、キャラクターが障害物を避けたりするだけのシンプルなものです。

簡単な仕様にするとは言っても、横スクロールアクションゲームの内容を若干かじった内容にするつもりなので、前回の的当てゲームより高難易度になると思います。

障害物はブロックや敵などを配置するものとしましょう。

障害物の回避方法はマウスクリックでキャラクターをジャンプさせたり、敵をクリックして特定のアクションを起こさせて回避する感じにします。

ブロック配置ですが、判定が楽になるように面倒な配置には、ならない仕様にします。実装が面倒そうなブロック判定ですが、ある程度ルールを決めておけば、ブロック判定の難易度は格段に下がります。キャラクターも常に一定方向にすすむだけとするつもりなのでいろいろ省けるかもしれませんね。

ステージ構成はできるだけランダムにしたいと思いますが、面倒なので一定間隔で、ブロックや敵を配置するなどの単純なものとします。

敵キャラは3種類ほど用意し、クリックしたときに特定の挙動をするような仕様とします。クリックすると倒せるなど・・・

データの記録はベストクリアタイムのみ保持する仕様とします。前回の的当てゲームのランキング形式よりも遥かに単純な仕様です。

画面構成自体はタイトル画面、ゲーム画面、説明書画面の3つを想定しています。

前回と違って説明内容にアニメーションを入れたいので別画面構成とします。


今回はアクションゲーム形式のゲーム制作ということですが、上記のような仕様で終わらすのは(ネタ的にも)もったいないと思い、普通のアクションゲームっぽい機能まで作ってみようと思います。(キーボードで移動させて、敵を踏んで倒すくらいまでかなぁ)

もはや初級編とは言えないくらいキモいソースになる気がします。できるだけ単純な処理で実装できるようには頑張りますが・・・

2.ゲームで使用する絵を制作する

的当てゲームでは全てgimpで絵を制作しましたが、今回はキャラドット絵を何体か作成するということで、ドット絵を作りやすいソフトを探してみました。

新しいソフトも用途に合わせて使い分けてみます。

3.ゲームで使用するBGMを制作する

的当てゲームでは全てDomino+VSTHostの環境でmagical 8bit plugの音源を使用して作曲しましたが、今回はStudio One Primeを使用して作曲することにしました。

無料でDAWソフトを体験したいと思う方は使ってみることをお勧めします。

4.画像、音声の読み込み、ゲーム起動の実装

前回と同じで基本機能の実装からやっていきます。

5.全ゲームオブジェクトの実装

モデルとなるゲーム内オブジェクトクラスを作成します。

6.ステージ構築

ブロックを並べてステージを構築します。

7.プレイヤーキャラ、敵キャラを実装

プレイヤーキャラと敵キャラを表示して動かしてみます。

8.ブロックとキャラの判定処理の実装

キャラクターとブロックを判定させて、地上に立たせてみましょう。

地上を自由に移動できるところと壁に当たってすすめなくなる部分まで実装します。

9.スクロール処理の実装

横スクロールを実装します。

10.敵の配置とアイテムの配置などのランダム配置処理

敵やアイテムなどを配置する方法を考えていきます。

キャラクターが近づいた時に表示させるようにします。

11.自キャラが敵を踏んだら倒せるなどのオブジェクト同士の当たり判定

敵を踏んだときに倒せて、横から当たったら反対にプレイヤーにダメージを与える処理を実装します。

12.背景のスクロールを実装

Z座標はあえて使わずに遠近感のある背景スクロールを実装します。

13.ゲーム画面の上に別のUIを表示、ゲームクリア、ゲームオーバー、全画面連携

ゲームクリアやゲームオーバーなどの画面遷移を作ります。

番外編1.キーで操作、キーコンフィグの実装

キーコンフィグを簡単に実装してみました。

番外編2.ファイルからステージを読み込み

ファイルからステージを読み込んでみました。

番外編3.ブロックとの当たり判定その2

今回のブロック判定大体いい感じのブロック判定が実装完了になります。

制作した感想など

今回制作したアクションゲームはクリック機能メインでいろいろできるようにする予定だったのですが、あまりにも難易度が上がってしまい(操作性が悪い感じで理不尽とプレイヤーが感じそう)、まともに遊べるようにするにはもっと作りこみが必要だと感じましたね。私はこのゲームをそこまで作りこむ気はなかったので、リリースバージョンにはキーボード操作や自動右移動を解除する手段を追加して誤魔化してしまいました。まあネギとりすぎて移動速度が速くなってしまうので難しいってのもありそうですが・・・なんにせよ、このゲームにはギミックが足りない。そこらへん追加したらもう少しは面白くなりそう。

今回制作したゲームのプレイ動画

制作にかかった期間は何か月だろうか・・・結構かかってしまいましたね。初動から完成まで4か月くらいはかかった気がする。

アニメ見たり、ぷよぷよしたり、適当な動画見たりと娯楽に費やした時間がほとんどだった気もしますが・・・これではいけないな・・・

そろそろガチでなんか作りたいと思い始めてきましたけど、なんかJavaで作るのだるくなってきたんだよねぇ~

次回ですが、Javaでさらっとテトリスでも作ってみます。毎回使ってた自己満ライブラリのソースも全部gitにアップするつもりです。(※未完成のクラスが存在するままアップすると思いますw)

テトリス終わったらJavaはしばらく休んで自己満で3Dの勉強でもしようと思う。

3Dの勉強の次は、いよいよ本番のUnityを使っていくことにしようかと思っています。