ソニックゲームの物理の概要。 パート2:実行中



ソニックに関するゲームの物理学に関する一連の記事の続き



このレビューでは、Genesis / Mega DriveおよびSonic CDのゲームの4つの部分すべてを取り上げています。

以下に書かれていることはすべて、ソニックが特別なボーナスなしで平らで乾燥した表面にあるときの状況を指します。 曲線、水中の挙動の物理学、ボーナススーパーソニックとスピードシューズは別の記事で検討されます。 この記事の手順では、文字の手順ではなくプログラムのサイクルを参照しています。

シリーズの他の部分へのリンク:
パート1:固体タイル
パート3および4:ジャンプとスピン
パート5と6:リングの喪失と水中への侵入
パート7および8:スプリングとギズモ、スーパースピード


変数

このパートでは、次の変数と定数がよく使用されます。

// Xsp:     Ysp:     // acc: 0.046875 dec: 0.5 frc: 0.046875 ( acc) top: 6 

運動の原理
トピックに関するGIF(4.7MB)


加速

ボタンを押し続ける スタンバイモードから、 accによって各ステップでXspの速度が増加し始めます。 ボタンを押し続ける スタンバイモードから、 Xspの速度はaccだけ減少し始めます。

スローダウン

ソニックがすでに動いているが、押されても立っていない場合 または 、コンピューターはボタンが既に移動している方向に押されているかどうかを確認します。 その場合、通常どおりaccが Xspに追加されます。 ボタンを反対方向に押すと、代わりに減速度定数( dec )が追加されます。 これにより、ソニックはすぐに向きを変えることができます。 accdecの間に差がなかった場合、Sonicの速度の変更に時間がかかりすぎて、プレイヤーを困らせます。 優れたエンジンは、このような子供時代の間違いを犯すべきではありません。

クリックした後、 Xsp = 0.1であると思うかもしれません decを減算し、 Xsp値は-0.4です。 奇妙なことですが、これはMega Driveのゲームには当てはまりません。 decの加算または減算の結果、 Xspの符号が変化する場合、 Xspにはdec 割り当てられます。 たとえば、上記の場合、 Xspは-0.5になります。 これの面白い結果はこの動作になります:クリックできます ワンステップでクリックして (またはその逆)、クリックした場合よりも速く実行を開始します ! 最終速度はまだ1ステップあたり1ピクセルより低いため、これはそれほど顕著ではありませんが、それでも事実です。 独自のエンジンを作成する場合、このような奇妙な動作をコピーしようとすることはできません。

摩擦力

クリックしない場合 または 摩擦力( frc )が作用します。 ゲームがコントローラーの水平ボタンから信号を受信しない各ステップで、 Xspの絶対値がfrc未満になるまで、 Xspの符号を乗算したfrcXspから減算します。 この場合、 Xspはゼロに等しいだけです。

最高速度

ソニックは特定の限界までしか加速できません。 ある時点で、彼は最高速度に達し、自分で加速することはできなくなります。 accXspに追加した後コンピューターはXsptopの上にあるかどうかを確認します。 超えている場合、値topがそれに割り当てられます。

これは、ソニックが何らかの理由で高速を獲得し、それを達成できない場合(たとえば、スプリングから自分で押すことで達成した場合)、ボタンを彼の動きの方向に押すと、コンピューターはaccを追加し、 Xspが top 、およびXsptopに等しくします。 したがって、方向ボタンを押すことで運動量を減らすことができます。 これは欠陥です! accを追加する前にXspが topより小さいかどうかをチェックすることにより、エンジンの開発中にそれを削除できます。 Xspが topよりも小さい場合のみ、コンピューターはaccを追加し、 Xspが topよりも大きいかどうかを確認します。 問題は解決しました。

実際、 Sonic CDスーパーピールアウト (ゲームの日本語版ではダッシュと呼ばれる)を実行できるため、同様の修正を使用します。これにより、ステップあたり12ピクセルの速度で前方にプッシュされます。 通常の状況では、ソニックはこの方法で加速することはできませんが、急にこの速度に達すると、プレイヤーが動きの方向にボタンを押している間、彼はそれで走り続けることができます。 ボタンを離すと、摩擦力が働きます。 もう一度押されると、摩擦力は作用しなくなり、 Xspは一定のままですが、新しいジャークなしでは12に上昇できません。

Sonic CDプログラマーは、Sonicが空中にいる状況にこの修正を適用しなかったため、彼がジャークを使用し、動きの方向にボタンを押しながら棚から落ちた場合地面を離れるXspは6に低下します。当時の速度はどれほど高かった。 これも大きな欠陥です。

動きと摩擦を正確にエミュレートする擬似コードは次のとおりです。

 if (   "") { if (xsp > 0) { xsp -= dec; } else (if xsp > -top) { xsp = xsp-acc; } } else if (   "") { if (xsp < 0) { xsp += dec; } else if (xsp < top) { xsp = xsp+acc; } } else xsp = xsp-minimum(absolute(xsp), frc)*sign(xsp); 

アニメーションの原理

実行中のアニメーション

Sonic CDを考慮すると、Sonicには3つの異なる実行中のアニメーションがあります。 Xspがゼロの場合にのみ立って描かれます。 他のXspがある場合、歩行アニメーションに入ります。このアニメーションでは、フレームの変化は地上での動きの速度に依存します。

Xspが6(またはそれ以上)になるとすぐに、脚が「回転」するアニメーションが実行されます。 Xspが10以上の場合、脚の動きが「図8」の形でジャークアニメーションになります。 ジャークアニメーションはソニックCDのみです。


歩く


ランニング


ジャーク

制動アニメーション

ソニックは、 Xspの絶対値が4.5以上の場合にのみ、旋回時にブレーキアニメーションに入ります。 Sonic 1およびSonic CDではXspがゼロに達するか符号が変わるまでブレーキアニメーションモードのままです。 他の3つのゲームでは、ブレーキアニメーションのすべてのフレームを再生した後、ソニックは歩行アニメーションモードに戻ります。


制動

異なるキャラクターの物理学の違い

すべてのキャラクター- ソニックテイルナックル (ソニック、テイル、ナックル)-加速、減速、最高速度、ランニング、ブレーキングの値は同じです。 特別な動きとスプライト(およびナックルが他の2つよりも低くジャンプするという厄介な事実)を除いて、それらは同じ方法で処理されます。

Source: https://habr.com/ru/post/J276849/


All Articles