自作ゲームエンジンの試運転として今は亡きハドソンの名作「ボンバーマン」風のゲームを作ってみました。
どうしてボンバーマンにしたかというとタイルマップとスプライトのテストとしてトップビューのアクションゲームを作りたかったというのがありました。そのためにはレトロゲームのコピーがやることが明確でわかりやすく楽しいからです。
開発時のことを順に書いていきます。
マップの当たり判定の肝を作る
まず今回トップビューのゲームを作るにあたって絶対に作らないといけないものがありました。
それがこのツイートで紹介している当たり判定です。
角っちょヌルってなるやつできた!
— いんわん (@inwan78) 2020年3月17日
数学出来んと思って拒否反応があったけど、
よくよくちゃんと考えてみたら中学数学レベルだったぜ pic.twitter.com/aeoULVo9PL
このツイートのGIFのようにトップビューのゲームではキャラクターが角をスルッと滑るように動くように作っておく必要があります。
これが無いと角で引っかかって操作性が悪くてイライラしてゲームが台無しになります。
どうやって作るのかちょっと悩みましたが何度か試行錯誤してるうちに「そうか!」と分かったのでできました。
やり方が分かってしまえばそんなに難しいものではなかったです。中学校数学でできます。
気になる方は解説記事をどうぞ ▷ 記事を見る
マップの生成
今回はステージが進むごとにマップが広くなっていきます。それと破壊可能ブロックの位置はランダムで毎回変わるようにします。
ということでプログラムでマップを作るようにしなくてはいけない。
なのでまずボンバーマンのマップがどんなんだったかを調べました。
ボンバーマンのマップはまず周囲を破壊不能ブロックで囲んであります。そして一つ飛びに破壊不能ブロックが並んでいます。
そして空いているところにランダムに破壊可能ブロックを置いていくだけ。大して難しくない。
後はプレイヤーの場所だけは必ず空いているようにしておけばOKです。
ゲームは爆発だ!
ここからいよいよボンバーマンの最重要部分である爆弾についてのプログラムに取り掛かります。
まずは爆弾の設置。これはプレイヤーキャラのタイルマップ上の位置におけばOKなので難しくない。
一定時間後に爆発するようにしてここで爆発用スプライトを作るようにしようと思ったら問題発生!!
自作ゲームエンジンでは各オブジェクトを毎フレーム更新処理を行えるようにするにはシーンに更新オブジェクトを登録しないといけないんですが、これだと他のクラス内から登録を行うことができません。なんてこった(´Д`)
やむなくマップクラスに同じ機能をつけてとりあえず対処したわけですが、今後のことを考えるとpixi.jsの表示に関するクラスはすべて更新メソッドを持っておいた方が良いのかもしれない。ということでこれは今後修正する予定です。
で、爆発のアニメーションを作ってみたんですがなんか違う(^^;)
なんか違うけど爆発してる感はある pic.twitter.com/qhsAUHIGjf
— いんわん (@inwan78) 2020年3月22日
原因は一マスずつアニメーションのタイミングで追加していくようにしていたからです。これはこれで良いような気もするんですけどね(^^;)
なので爆発時にすべての爆発用のスプライトを表示するように変更しました。
で、その際に破壊可能ブロックがある位置ではブロックを燃えるアニメーションに切り替えるようにしました。
ボンバーマンになってきた! pic.twitter.com/JkUtjLIvPL
— いんわん (@inwan78) 2020年3月24日
敵を配置する
次は爆弾で倒す敵キャラが必要です。
とりあえず細かいことは考えず、適当にマップに配置するように作りました。
そして壁などに当たるとランダムで方向を変えるように作りました。
当たり判定などは特に難しいことも無いのでちゃちゃっとつけて終わりです。
ただ、敵を消すときにちょっとした問題がありました。
enchant.jsの時は最初に敵の配列を用意していて出現/倒すでフラグを切り替えて管理していたんですが、今回はその時に敵クラスを生成し配列にpushするようにしていたので消す際に「どれだ?」ということになってくるのでちょっと困りました。
とりあえずIDをつけて管理するようにしてみたんですが、もっといい方法とかあるんですかね?ちょっと気になります。
アイテムを配置
ブロックを破壊したらたまにアイテムが出現します。
ブロックを破壊したらランダムで出現するのか、それとも最初からブロックの下に用意しておいた方が良いのかちょっと悩んだんですが、最初から下に置いておいた方が楽だろうということでそっちにしようとしたら自作ゲームエンジンの問題が発覚して困りました。
レイヤーで管理してるつもりがちゃんとなってなくて。。
修正はそんなに大変ではなかったですけど「そういやちゃんとテストしてなかったわ(;´∀`)」と、ちょっと自分のいい加減ぶりにイラっとしました。
細かいところを詰めていく作業
ゲームの基本部分はできたのでここからはよりゲームらしくなるように細かいところを詰めていく作業になります。
アイテムをとったらパワーアップするし、得点表示もいるし、残機表示とかげゲームオーバーとか、効果音とか、ステージ進行とか、そういうところを作っていくことになるんですが、これが結構しんどい(;^ω^)
地味だし、自分の作り方が悪いとあちこち修正が必要になったりもしてくるので正直ここからはかなり苦痛の作業になります。でもゲームとしては当たり前に必要なことなのでやらないわけにはいかないんですよね。。
モチベが尽きました
そういう細かな作業をしているうちにモチベーションが削られて行って制作を打ち切りました(^^;)
まぁプライベートで辛いことがあったのでモチベーションに関してはむしろもった方だと言いたい!よく耐えた!俺!。゚(゚´Д`゚)゚。
というわけで、中途半端ながら公開しました。
自作ゲームエンジンのテストとして作ったのでボンバーマンもどき以外のことは何も考えていなかったので完成イメージが無かったのも中途半端になってしまった要因ではあります。
まぁ気が向いたら改良しようかとおもいます。