はぁぁあぁ・・とうとうウチのプレステにも寿命がきました.
もはや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.