リフト その4

一昨日のコードは上りリフトにしか対応していなかったので、今日は下りリフトに対応させました。
今日の差分
20フレーム分の座標をチェックするテストコードも追加しています。


前のコードではキャラクタの移動順序を気にしていませんでしたが、この順序が重要でした。
下りリフトを単純に移動させるだけで実装すると、

  1. (リフトが先の場合) リフトが下に移動→上のキャラが自由落下
  2. (キャラが先の場合) キャラの下にはリフトがあるので動けない→リフトだけが下に移動

のようになります。
どちらの場合も、リフトに乗っているだけで短い落下を繰り返してしまいます。


1.だけを考えるなら、リフトの上に乗ったキャラのY軸方向の速度(vy)をリフトと同じにすれば自動的にリフトに追随して移動できますが、常に宙に浮いた状態になり、ジャンプできなくなります。
また、2.に対応するには、リフトが下に移動するときに上に乗っているキャラクタも一緒に移動させるしかないので、こちらに合わせたほうが簡単です。


結局、上りリフトとの整合性も考え、

  • リフト(ブロック)の上に乗ると、キャラクタのvyを0にする
  • キャラクタのvyは0なので、それ自身では動かない
  • キャラクタのvyが0でリフトの乗っている場合は、キャラクタとリフトを一緒に動かす

という実装になりました。
要するに、vyは乗っているブロックからの相対速度ということですね。