2019/5/31 | 投稿者: ghost

もう一度前稿で示した動画を見てもらいたい。



プレイヤーが画面奥へ向かって射撃している……そういう風に見えるよな?……のだが、本稿はこれをどうやっているか、という話を、自身の失念防止のために書き留める趣向である。

本作では照準を動かすと逆方向にすべてのオブジェクトが流れる……つまり、実装はどうあれ、すべてのキャラクタは自機、正しくは照準器座標に対する相対位置に表示されているということだが……のでわかりにくいかもしれないが、照準を動かさないで射撃すると、照準器の中央に正しく着弾していることが動画からわかると思う。

また、よく見ると弾の飛翔速度は一定ではなく、射撃直後は速く、照準着弾に向けて遅くなっている。これは奥行きを表現するためにこうしているのだが……余談だが、前作Shoulder Blade OVERDRIVEは勢い優先の弾幕張りゲームであることを念頭において、敢えてそのような実装をおこなっていない……移動量が一定でないのに目的座標に正しく到達する演算は、厳密に言えば微分を要することになるが、もちろんそんなことを真面目にリアルタイムでおこなうパワーはZ80にはない……まぁ、それもやり方次第だが、Z80がゲーム実現のために1フレーム時間中こなさねばならない仕事はそれだけではなく、むしろここで触れているのはそのほんの一部に過ぎない……ので、ある種の誤魔化しでもってまるでそうしているかのように錯覚する状況を作っているのである。

先に結論を書いておこう。

(1) 弾は発射後、7フレーム時間(約0.5秒弱)で照準に到達する。
(2) 自機と照準の座標差=弾の飛翔距離を16分割(符号付右シフト4回)する。
(3) (2)の距離を1単位として、着弾まで1フレーム毎に 4、4、3、2、1、1、1単位ずつ弾は移動する。
(4) (2)の演算時の余り=シフト後の下位4ビットを(4)の単位毎に分散加算して、誤差を補正する。

端的に言えばやっていることは以上になる。

これでわかる人にはこれ以上の説明は不要で、以下は読むに及ばない。が、原理まで言及しておかないと、他ならぬボク自身が後日「コレって何でこんなことしてたんだっけ?」と首を傾げるのは必定なので、ただただそれを避けるべく下記の通り備忘する。

続きを読む
タグ: MSX Z80




AutoPage最新お知らせ