2Dアクションにおける重力
最初の記事ですが、ちょっと難しいお話でも。
今日は自機にかかる重力の調整をしていました。
一般的にジャンプ時に速度を与え、重力加速度を設定すれば自然な放物線になります。
しかし、2Dアクションではジャンプキーを押す長さによって最大高度が変わります。
つまり適切な処理を入れなければジャンプの高さを変えられません。
値の設定
とりえあず小ジャンプと大ジャンプで必要な値を設定しました。
- 小ジャンプ:64px以上
- 大ジャンプ:256px以上
設定する値は以下の通りです。
- 重力加速度
- 重力加速度(上昇時)
一定時間の間は、ジャンプキーを押している間だけ重力が小さくなります。
この条件のみで試行錯誤していましたが、なかなか上手くいきません。
で、ジャンプにおける大事な要素は何かと考えた結果、ジャンプ時間ということに。
1回のジャンプであまりにも時間がかかると大きくテンポが失われます。
といっても感覚じゃよくわからないのでちょっとだけ他のゲームを調査しました。
各ゲームの最大ジャンプ時の所要フレーム
上昇時は重力を軽減しているため、下降よりも長いフレームを要しています。
また、上昇にかかる時間は30フレーム以下だということが分かります。
(実際に40フレームで計算していてもっさりしていた)
操作時の体感重さはRe!Fが普通、ゲーム1が軽い、ゲーム2がちょっと重いぐらいでした。
結局
上昇30フレームで調整するために、初速度を大幅に上げました。
しかし、それでは最小64pxにするにはすごい重力が必要です。
そこで、キーが離されたときに速度を下げるようにしました。
そんなこんなでジャンプ処理はとりあえず終わったかなーという具合です。
これを決めないといろいろ決定できないのでまぁ早めにやりました。
ゲーム画面を見せられなくてすみません。
まだ図形や仮画像なのでもう少しだけお待ちください。