カナバルトのチューニング

元のスペル、ジョーク、句読点を保存する試みが行われました。 そして、はい、この投稿はカナバルトの作成者による記事の翻訳です。ゲームを作成したとは思わないでください。



画像



[この記事では、 Canabaltの Flashバージョンの技術的特徴、割合、サイズについて説明します。 読者、注意してください、この記事にはネタバレと多数の数字が含まれています!]



友人からよく聞かれます:私のカナバルトフラッシュゲームのソースコードをインターネットで公開して、引き裂いて勉強することを考えましたか? 彼らは、ゲーム内で物理学やその他のものがどのように構成されているかを見ることが人々にとって役立つと考えています。 しかし、私はこの考えに懸念を抱いており、これにはいくつかの理由があります。例えば、5日間で書かれたゲームのソースコードは悪夢のような不快なスパゲッティコードであり、誰にも役に立たないでしょう。 したがって、私はカンナバルトの最初の誕生日に対する誇りの感覚から、「すべてが内部でどのように機能するかについて語る記事を書いてみませんか?」と考えました。





寸法





画像



カナバルトを開発するときの私の目標の1つは、手のひらに汗をかくようなブレードのような鋭い反応が必要なゲームを作成することでした。 このようなゲームを2Dで作成するのはそれほど簡単ではありません。 3Dゲームでは、2Dゲームとは対照的に、同じ感覚を与えないように、2Dゲームとは対照的に、遠距離で遠くを見ることができます。 カメラを「押し戻す」ことで、プレーヤーがより多く見えるようにすることができますが、これを行うと、オブジェクトの動きが遅くなります。



ゲームの表示領域は幅480ピクセル、高さ160ピクセルです。 Canabaltの通常のWebバージョンは2倍のサイズ(960x320)で表示され、MEGAアセンブリの解像度は3倍です。 ただし、ゲーム内では480x160ピクセルの解像度で動作しますが、説明するすべてのサイズと速度は同じ方法でpxで示されるため、記事のニュアンスを理解するにはこれを覚えておく必要があります。



480x160はなぜですか? 単純に、オブジェクトの速度に関する問題を回避するのに役立ちました。 このような寸法により、プレーヤーは障害物により効果的に対応できるように十分に前方を見ることができ、また、スピード感を生み出すクールでコンパクトなウィンドウサイズを維持できます。 ところで、速度については少し後で説明します!



ゲームの表示領域は480x160ピクセルにすることができますが、カナバルトの世界は幅0から始まり、320ピクセルの高さを維持しながら無期限に続きます。 背景にある建物の視差効果を作成するために、少し垂直スクロールを残したかったのです。 それらが上下に移動する方法に気付くことができ、これは「深さ」の感覚を作成するのに役立ちます。 明らかに、プレーヤーの垂直方向のスペースが大きいほど、これにより、落下するオブジェクトや大きな家のファサードを作成できるようになります。 落下オブジェクトは、パルクール/フリーランの世界で最も壮観な作品の1つなので、ゲームに追加したかったのです。



走っている人は24x24ピクセルのスプライトですが、その境界ボックスは小さくなっています。 多かれ少なかれ、すべての建物は16x16ピクセルのグリッドに収まります。 480x320 pxの3つの写真から作成されたスクロール背景。 最も近い背景レイヤーに2つの写真を使用しました。 960ピクセルの幅にすると、より多様になります。 遠い背景には、1つの画像を使用し、ゆっくりと移動しました。これは、目立たない背景レイヤーだからです。



画像 Flixel(Canabaltの開発に使用されたFlashライブラリ)オブジェクトには、「スクロールファクター」( scrollFactor )を割り当てることができます。これは、オブジェクトが他のオブジェクトと比較して移動する方法に影響します。 つまり、オブジェクトに値(1.1)の「スクロールファクター」が割り当てられ、その位置が水平方向に20ピクセルずつ変更されると、画面上でその位置も20ピクセルずつ変更されます。 「スクロール係数」が(0.5、1)の場合、これは、この位置の変更により、視覚的にオブジェクトが10ピクセルだけシフトすることを意味します。 カナバルトでは、遠いバックグラウンドレイヤーの場合、「スクロール係数」は(0.15、0.1)、ニアスクロールファクターの場合(0.4、0.2)です。 このような「調整」により、プレーヤーと背景に対する空間侵略者との間にある程度の距離を作ることができます。さらに、プレーヤーが「超音速」に達した場合、建物が「whiで飛ぶ」ことはありません。



プレイヤー





画像



私の目標の1つは、私が育ったゲーム( FlashbackPrince Of Persia )のアニメーションに似たアニメーションをカナバルトで作成することでした。 これらのゲームは、多数のフレームを持つリアルなロトスコープアニメーションを使用し、各ゲームには特別なスタイルがあり、これらのゲームのアニメーションはクールに見えました。 カナバルトでは、走っている人には4種類のアニメーション(走る、滑る、ジャンプする、落ちる)しかありませんが、それにもかかわらず、アニメーションは38フレームで構成されており、その約半分はアニメーションの実行専用です。



前に学んだように、カナバルトでは、走っている人の画像の寸法は24x24ピクセルです。 比較のために、これはスーパーマリオブラザーズの通常のマリオのサイズよりもわずかに大きいです 、ただし「スーパー」マリオのサイズよりもわずかに小さく、両方のサイズよりもわずかに広くなっています。 反対側から見ると、キャラクターの高さは、世界の目に見える部分の高さの約15%です。 ご覧のとおり、キャラクターは24x24の長方形のスペース全体を使用していません。このスペースの大部分は、ジャンプ中の落下や手の投げをアニメーション化するために使用されます。 走っている人の「ヒットボックス」(ゲームエンジンが動作するオブジェクトの「実際のサイズ」)ははるかに小さく、約12x14ピクセルです。 この図では、「実際のサイズ」はキャラクターの中央にあるだけでなく、下の境界にわずかに左に移動していることがわかります。



長方形のオブジェクトではなく円を使用する場合でも、ヒットボックスの設定はゲーム作成の非常に重要な部分です。 ヒットボックスを微調整することで、ゲームの複雑さを制御し、達成したい内容に応じて完了するのが簡単または難しくなります。 ゲームをもっとシンプルにしたかったのですが、そのような設定には単にサイズを縮小または拡大するだけではないことを理解する必要があります。



ゲーム内でより多くの時間が屋根の間や他のオブジェクトを飛び越えるのに費やされるため(または少なくともそれを試みる)、これらのアクションができるだけ自然に見えるようにキャラクターの「ヒットボックス」を設定しようとしました。 「ヒットボックス」がキャラクターより先に進まないという事実により、プレイヤーは衝突やつまずきを引き起こすことなく障害物に非常に近づくことができます。 「ヒットボックス」がキャラクターの少し左に出ているという事実により、建物を少し「ひっくり返す」ことができますが、最後の瞬間にジャンプする時間があります。 これらすべてのニュアンスにより、ゲームが少し簡単になり、プレーヤーの反応が少なくなり、プレーヤーを動揺させることを恐れることなく、より複雑な障害物を追加することができました。



ああ、私はほとんど忘れていました、障害物のヒットボックスも面白いように見えます、それらは高さがわずか2ピクセルです! =)これはまた、ゲームを単純化し、プレイヤーが「何?!」と言う瞬間を避けます。 なんてこった…私? 私は通常、このe ...障害を飛び越えました! ねじれ、単一のギャップではありません!」



キャラクターの動き





画像



前述したように、画面サイズは480x160ピクセルです。 キャラクターの最高速度は毎秒800ピクセルで、ゲームユニットでは毎秒約80メートル、つまり毎時約286 kmです。 とても速いです。 しかし、これにも関わらず、可視領域の幅は480ピクセルで、キャラクターは左端に位置しているため、プレイヤーは発生する障害に対応するために0.5秒(480/800)以上かかります。 私の意見では、これは良いウィンドウサイズです。私の意見では、人々は予期しない出来事に反応するために約0.3秒を必要とします。 したがって、技術的には、最も困難な場合でも、人々はカナバルトでプレイできます。



ただし、プレーヤーは800ピクセル/秒の速度で実行を開始しません。 最初から。 ゲームの開始時、速度は100ピクセル/秒です。 ゲームにはキャラクターの加速曲線もあるので、速度は0〜100 px / sです。 加速度は50ピクセル/秒、速度は100-250ピクセル/秒です。 加速は30ピクセル/秒、速度は250-400ピクセル/秒、加速は20ピクセル/秒、速度は400-800ピクセル/秒、加速は10ピクセル/秒です。 簡単に言えば、動きが速いほど加速は遅くなります。 これは、最高速度に到達するのに多くの時間がかかることを意味しますが、つまずいた後に平均速度に達することができます。 カナバルトでは、障害物(椅子、箱など)によってプレイヤーの速度が30%低下します。 プレーヤーが300ピクセル/秒の速度で実行される場合。 (加速度20ピクセル/秒)、障害物との衝突後、その速度は210ピクセル/秒に低下し、加速度は30ピクセル/秒に増加します。



カナバルトは、面白いキャラクターのジャンプルールも使用します。ジャンプボタンを長く押すほど、ジャンプが高くなります。 これは、プレーヤーがジャンプボタンを押したときにカウントダウンを開始するタイマーを使用して実装され、タイマーが期限切れになるか、プレーヤーがジャンプボタンを放すまで、キャラクターを300ピクセル/秒の垂直速度に設定します。 (正確には、速度は-300に設定されます。負の値は2Dゲームで「トップ」を意味するためです。



しかし、それだけではありません! タイマーの時間は、ジャンプボタンをどれだけ押しても、速度、実行速度、タイマーの有効期限によって異なります。 これにより、キャラクターの走りが速ければ速いほど、空中に長くいることができます。 最大タイマー値は0.35秒に達する可能性があります。 また、ジャンプのルールにもう1つの小さな変更を追加しました。タイマーが最近作成された場合(ボタンが押されてから0.08秒未満が経過した場合)、キャラクターの垂直速度は300 px / sではなく200 px / sに設定されます。 これにより、プレーヤーがジャンプボタンをすばやく押してもジャンプしすぎないようにすることができますが、同時に、通常のジャンプでジャンプボタンが押されても奇妙に見えません。



屋根





画像



ゲームのプロトタイプがまだ非常に新しい場合でも、屋根はゲームで使用されると確信していました。 このアイデアは、ゲームの仕組みに完全に適合しています。 ゲームの初期のプロトタイプでは、大きな緑の長方形が空いている間に使用されていましたが、白い長方形の代わりに走っている男、緑の長方形の代わりに建物を見るのはかなり想像しました。 オブジェクトのサイズはこの考えによく適合します。 そこで、これらの設定のグラフィック要件を満たすために、さまざまな方法で移動、繰り返し、結合できる16x16ピクセルのタイルで構成される屋根、壁、塗りつぶしのシステムを開発しました。



(Flixelユーザーへの注意:FlxTilebockクラスに基づいてカスタムオブジェクトを作成し、建物の内部セクションのランダムタイルを提供し、各ブロックの端で使用する特定のタイルを構成することもできました。ほとんどの建物は2つのカスタムFlxTileblocksオブジェクト屋根:私の意見では、廊下のある建物は、そのような7つのオブジェクトで構成されています)。



他の多くの重要なカナバルト要素と同様に、建物にもヒットボックス設定があります。 建物は大きな長方形ですが、右側に垂れ下がる小さなスペース(正確には8ピクセル)があります。 このインデントは建物の寸法に追加され、建物の「実際のサイズ」を形成します。または、反対側から見ると、ゲームが「見る」建物のサイズを形成します。 これは必要以上にほんの数秒遅れてボタンを押す人のためにゲームを簡素化する別の方法です、彼らはこのジャンプをしたいのですが、彼らは少し遅れているので、私たちは「彼らに会いに行きます」彼らにゲーム。 これらの設定はすべて、ゲームから受け取る「ファン」に影響します。



結論として





画像



この記事がおもしろくて役立つことを願っています! また、カナバルトは分析的に開発されたものではなく、ゲームの開発時にオブジェクトの比率に基づいてキャラクターの理想的な速度を測定したわけではないことを付け加えます。 私はいつもやっていることをやっただけです。ゲームですべてがクールだと感じるまで、多数のパラメーターを変更しました。 記事では、これを達成できた理由の少なくともいくつかについて話そうとしました。 これを管理できたらとても嬉しいです。



All Articles