【pyxel 1.5】pyxelで2Dアクションを作ってみる(2)
前回に引き続き2Dアクションゲームの製作を行っていきます。今回は「画面のスクロール」をメインに、その他こまごまとした追加要素を作りました。
前回までの進行具合は以下のnoteをご参照ください。
さて、2Dアクションゲームといえばやはり「スクロール」が必要でしょう。画面スクロールを実装するにはカメラの動きを気にしなければなりません。早速ですが画像でご紹介。
2パターンのGIFを載せてみました。似ているようで動きはちょっと異なっています。プレイヤーの位置を指で押さえてみると違いが分かりやすいかと思います。
上の方はプレイヤーの移動時に「マップだけ」ずらしています。背景のマップが動くので移動しているように見えますが、プレイヤーの画面位置は変わっていません。そのため指の位置は全く変わらないはずです。どんなに広いマップでも同じ画面位置のまま移動できます。
下の方は「マップもプレイヤーも」動かしています。そのため、プレイヤーの画面位置がどんどんずれていきます。指で押さえていてもすぐにずれてしまうはずです。こちらの方がスピード感はあるのですが、移動していくうちに画面の端に近づいてしまいます。広いマップを探索するにはどこかで画面位置のリフレッシュが必要です。
さて、どちらを採用するか…。
結論としては下の方にしました。なんかキャラクターがビュンビュン動いて楽しかったので。まぁそこまで悪い方式では無いですよね(自己暗示)。ロックマンとかこんな感じだった気がします。
続いて作成したのはプレイヤーの攻撃に角度を付ける機能です。今回のゲームは最終的に「早い時間で・ダメージを受けずに敵を全滅すると高スコア」といった形にしようと思うので、プレイヤーの攻撃バリエーションを増やします。昔スマッシュブラザーズにあった「ターゲットをこわせ」みたいにしようと思います。
これできちんと操作すればノーダメージでのクリアも出来そうです。
プレイヤーについての改修はここまで。続いて敵の動きについてです。
敵キャラクターには色のバリエーションを増やし、破壊後の画像も作成しました。
この部分は各敵に応じて破壊後のタイルマップの対応を保持することで実現しています。具体的には下記の辞書型です。
self.enemy_break = {
(0, 1):(0, 7),
(1, 1):(1, 7),
(2, 1):(2, 7),
(3, 1):(3, 7),
(0, 2):(0, 8),
(1, 2):(1, 8),
(2, 2):(2, 8),
(3, 2):(3, 8),
(0, 3):(0, 9),
(1, 3):(1, 9),
(2, 3):(2, 9),
(3, 3):(3, 9),
}
例えばタイルマップ(0, 1)の敵は破壊されると(0, 7)のグラフィックに変わります。冗長ですが手作業でこのような対応付けを作りました。
その他にはプレイヤーの体力やステージ開始からの時間経過などを実装して今回はおしまい。
コード全体は長くなるので、GitHubのリポジトリをご参照ください。
ここまで読んでいただきありがとうございました。
ここまで読んでいただきありがとうございます!