新移動ルーチン考察

キャラクタの上に乗れるように大変更中です。
合わせてマズそうな箇所も作り直しています。


現在の移動ルーチンは、

std::pair<acceleration,sprite_form>
routine(rect, velocity, sprite_form, input_command);

の形式で、物理法則に従う分には問題ありません。
しかし、リフトが画面の反対側から出てくるようなワープ処理には不向きです。
今のコードではワープの瞬間に画面の反対側まで一気に移動できるだけの加速度を与えているわけですが、直感的ではないです。
また、この方法では途中に障害物があるとそこに引っかかってしまう問題もあります。
物理法則を無視したい場合は座標や速度を直接操作する方が直感的です。
かと言って移動ルーチンからこれら全てを書き換え可能にしてしまうと、それぞれの変数の意味が薄れてしまいます。


で、よく考えると、

  1. 座標直指定
  2. 速度を変更可能にし、そこから次の座標を求める
  3. 加速度を変更可能にし、そこから次の速度、座標を求める

の3レイヤに分ければよいのかな、と。
3.にラッパーをかぶせると2.に、2.にラッパーをかぶせると1.にできるので、アルゴリズムに応じて書きやすいレイヤを選べますね。