ゼルダの伝説におけるリンクの動き


私は最近ゼルダ(私のすべての時間favゲーム)の元の伝説についての誰かと話しました、そして、彼は開発者がどのようにグリッドの中でリンクの動きを続けたかについて言及しました.私は前にそれについて考えたことがないと私は本当にクールだと思った.これは微妙なのですが、ここでどのようにリンクをするときには、プレーヤーのターンには、グリッドにスナップインするように見える見ることができます

私はもっと知りたかったので、私は少しgoogledと呼ばれるブログ記事に遭遇Movement Mechanics 彼が何が起こっているかについて説明するトロイギルバートによって.それを合計するには、リンクと背景のタイルを構成するスプライトは16 x 16ですが、リンクは8 x 8である半分のタイルグリッドに沿って移動します.プレイヤーは、リンクを移動することができますダウン、左、または右の1つのピクセルを一度に、ゲームは常にリンクを8 x 8のグリッドに彼は障害の間に歩くことができるので、エッジに巻き込まれることなく戸口を維持します.
私も、コードワークショップによってYouTubeビデオに遭遇しました.私はゲームメーカーのスタジオを使用しないが、私はインストラクターが説明し、私のニーズのためにそれを適応したので、私はこの手法がどのように動作するかを見ることができる従った.
コードワークショップでは、方向リンクで移動すると、他の軸上のグリッドに整列していることを説明します.あなたがX軸に沿って左または右に動くならば、リンクはy軸に整列します、そして、あなたがy軸に沿って上下に動くならば、彼はx軸に整列します.
PICO - 8でデモを作りましたので、コードワークショップのalign_to_grid 関数Luaを使用します.
function align(val, alignTo)
  local remainder = val % alignTo
  local halfway = alignTo/2

  if (remainder > halfway) then
    return alignTo - remainder
  else
    return -remainder
  end
end
The align 関数は2つのパラメータを取ります:val プレーヤーの現在のXまたはYの場所(私は少し詳細に説明します)、そしてalignTo , あなたのプレーヤーが整列するピクセルの量です.リンクは8 x 8のグリッドに整列しているのでalignTo .remainder xまたはyの位置から残っているのはalignTo 値.
残っているピクセルの中間点より大きい場合、alignTo - remainder , otherwise return -remainder .
この関数から返される値は、プレイヤーのx or y 値.
例えば、プレイヤーがプレスleft 彼らは負のx軸に沿って移動したいvx がプレイヤのspeed そしてx 関数の値をさらに小さくします.この場合、align() は、プレイヤーのy 値.
if (btn(⬅️)) then
    vx = -1
    y+=align(y, 8)
end
私がこれをした方法はコードワークショップがどのようにしたかと少し異なります.
8 x 8グリッドに沿ってプレーヤーの16 x 16スプライトSNAPを示すために、PICO - 8の私のバージョンのGIFは、ここにあります.

数ヶ月前にゲームをした(上記のGIFでロボットバディを搭載)プレーヤーは16 x 16のグリッド内のピクセルで移動するが、動きは….まあ、悪い.プレイヤーのサイズはスプライトが移動しなければならなかったスペースにちょうど同じくらいだったので、私の性格は角に固定しました.私は戻って戻って、このテクニックで動きロジックを更新するのを待つことができない!

参考文献

  • Movement Mechanics by Troy Gilbert


  • Nerdy Teachers - それがしばらくあった時から、私が若干のPIO - 8ものの上で私の記憶をリフレッシュするのに用いられるものすごい資源!