[シューティング]放射状に綺麗に撃ちてぇ


はぁぁあぁ・・とうとうウチのプレステにも寿命がきました.
もはやCDを読み込んでくれませぬ.
モーターの速度が上がらんのかしら・・・


まぁそれはそれとして・・・
(いつもこんなのばっかりだな・・)


きれいな放射状の弾を撃たせたくなったのですよ.
まぁ,角度をつけて撃つには,
    VX = Cos8( angle ) ;
    VY = Sin8( angle ) ;
みたいにやればOKすね.
ちなみにSin8はWinGLで用意された関数で,角度を1周が256度として与えると,
値を-256〜256で返してくれるものです.
これを8回くらい使えば 8WAYショットもなんのその!(意味不明)

たしかに弾は8方向にでたけど,なんかおかしい.
なんか,きれいな円を描かない.

それもそのはずで,キャラの最小移動単位が1ピクセルだったからねぇ..
そのうち誤差が積もり積もっちゃうよねぇ..

これを解決するには,もっと小さい単位を使えばいいわけで・・・
浮動少数を使えばOKなわけで・・

しかーし,なんか浮動少数はイヤ.遅そうだから・・・

というわけで,int型の下位4ビットを少数扱いにしてみてはどうじゃろう?
ひょっとして,これって,固定小数点とかいうのかな?

これなら 大体最小移動単位が0.06ピクセルくらいになるんじゃないかな?
表示のときだけ右に4ビットシフトとかしてやればよさそうだし.

実際,これで放射状の弾もきれいに撃てたし・・・


実際に使うときはこんな感じかなぁ・・
    //--- どこかでこんな風に宣言されてる
    int x4, y4 ;
    int vx4, vy4 ;

    //--- キャラクタの座標更新
    x4 += vx4 ; 
    y4 += vy4 ;

    //--- 表示するときだけシフト
    Draw ( x4>>4, y4>>4, patnum );




< Back to Diary.