シューティングゲーム 第21回です。
今回は、前回説明した内容に則り、プレイヤー移動を組んでいきます。
斜め方向移動が、狙撃弾と同じ考え方と言う事は、小数点以下が必要になります。
そこで移動カウンタを設け、その値を小数点扱いとし、加算値を加え1を超えたら実際の座標を±1する事にします。
移動速度の初期値を、縦横方向は+100、斜め方向は、Laboratoryテーマ9「32方向弾」の45度時の加算値を利用し+70と設定します。
移動カウンタが100を超えたら1ドット移動します。
変数的には、このように取っています。
変数用途 | 備考 |
プレイヤーY座標 | プレイヤーが表示されるY座標 |
プレイヤーX座標 | プレイヤーが表示されるX座標 |
Y座標移動カウンタ | 加算値を加え100を超えたらY座標に±1 |
X座標移動カウンタ | 加算値を加え100を超えたらX座標に±1 |
縦横方向加算値 | 初期値:100 |
斜め方向加算値 | 初期値:70 |
因みにX・Y座標をX・Yカウンタと別々にせず、それぞれ16ビットで取り「100」を「256」として換算すれば、もう少し楽に計算できます。(桁上がりなど)
でも、自分で分かり易いように組んでます。
この仕組みで、縦横方向は1回の移動で1ドット移動し、斜め方向は2回で1ドット移動します。(70+70=140-100 余り40)
これで、8方向弾と同じ速度比になります。
んー、長い!
なんか凄く回りくどいロジックになった気がする…。
2,710行からの「P MOVE COUNT」で移動カウンタを加算。
2,930行からの「P MOVE」で移動カウンタの100越えをチェックし、座標値加減算しています。
さっき書いた16ビット化なら、「P MOVE」は不要ですね…。
まぁ、今回はこれでいいか、次回作はもう少しスッキリさせたいな。
次回は、プレイヤーのパワーアップ(速度)を組んでいきます。