むりこのーと

創作活動の記録や、日々思ったことをゆるく書いています。

【ゲーム開発】気持ちいい横スクロールアクションを作るPart5

どうも。

今回も開発ログを書いていきます。前回の記事はコチラです。

www.murinote.com

それではどうぞ。

開発環境

現在の進捗

プロトタイプ版のリリース

現在、プロトタイプ版としてitch.ioにて公開をしております。 プロトタイプ版はこちら

ゲームスタート、ステージを走り抜ける、ゴールした後にプレイヤーの強化、再スタート、を繰り返していくことになります。基本的には今までと変わりありません。

パワーパラメータの活用

プレイヤーのパラメータのうち、パワーを使用できていなかったので、これを活用するために木箱ブロックを実装しました。

このブロックは通常ブロック2×2個分の大きさであり、プレイヤーのパワーを消費することで、壊しつつ進み続けることができます。パワーがない場合は通常のブロックのように振る舞います(ぶつかって止まります)。

コードの話になりますが、木箱はプレイヤーの進行方向に、回転しながら吹き飛ぶようにしています。壊すとはいいつつ、押しのけ吹き飛ばす、といった挙動をします。

    handlePlayerBoxCollision(player, box) {
            ...
            // 箱を放物線上に回転させながら押し飛ばす
            // フェードアウトもさせる
            this.tweens.add({
                targets: brokenBox,
                alpha: 0,
                angle: 360 * 0.75,
                x:
                    brokenBox.x +
                    (player.facingRight ? 1 : -1) *
                        player.body.maxVelocity.x *
                        (1000 / 1000),
                duration: 1000,
                onComplete: () => {
                    brokenBox.destroy();
                },
                onUpdate: (tween, target) => {
                    // Y軸の放物線運動計算
                    const gravity = GAME_CONST.GRAVITY_Y;
                    const time = tween.progress * (tween.duration / 1000); // 秒単位
                    // 更新後のy座標計算
                    // y = y0 + v0*t + 0.5*g*t^2
                    const height =
                        target.startVY * time + 0.5 * gravity * time * time;
                    target.y = target.startY + height;
                },
            });
        ...
        }
    }

なぜこのような仕様にしたのかというと、今回の実装よりも木箱がばらばらになるエフェクトを作るコストが高そうだったからです。まあ言ってしまえば面倒だからです。

まあ後関係ないことを言うと、ゲームを作りたい人はぜひ数学と物理を学生のうちに真面目に学んでおくことをお勧めします。今回でいうと箱が放物線上に吹っ飛ぶ様子を再現するために落下の法則を使いましたので。

UIの改善

フォントの変更・基本情報の表示方法変更

以前まではデフォルトの何の変哲もないフォントを使用していましたが、スタイリッシュでカッコいいフォントを使用するように変更しました。 また、右側に表示しているパラメータの表示も変えました。特にプレイヤーの能力を、基本能力と特殊能力に分けて表示するように変更しました。

これによってプレイヤーがパッと見たときでもある程度すぐに理解できるようになったかと思います。

強化選択肢の追加

しれっと大きい改修になりましたが、ゴール後に選択肢を選ぶことで特殊能力を獲得できるようにしました。 現在実装しているのは、コインを取得することで速度を上げる能力と、空中で追加でジャンプできるようになる能力です。特に空中ジャンプをたくさん獲得すると、ジャンプするだけでゴールできるようになります。友人曰く「ずるしている感が素晴らしい」とのことです。

このへんはゲーム開発全般的な話かと思うのですが、ゲームを作る際は「現実では得られない(得にくい)体験」を入れ込むことで、楽しんでもらえる確率が高まると思っています。現実(仕事や勉強)ではズルってなかなかできないものですし、よしんばできたとしても罰が待っていたり、まあつけが回ってくるものですよね。それを何のペナルティもなしに体験できるのですから、これがしっかりできているゲームは長く楽しんでもらえるというわけです。

今後の構想

今後はゲームに効果音や演出をつけたり、簡単なチュートリアル系を導入するなどを進めていこうかと思います。 また、スマートフォンd芽生本格的に操作できるようにしていきたいと思います。

では、次回の進捗にてまた会いましょう。