何のこっちゃ?
ですね。
ヘリが回転(旋回)する時、主翼(一番大きいプロペラ)の中心点を軸にして機体を回転させるのですが、その際に本体と尾翼の位置を求める作業です。
具体的には、以下のロジックのposを埋める作業。
/* *---------------------------------------------------------------------------- * ヘリの向きを変える *---------------------------------------------------------------------------- */ static void heri_roll(struct Enemy* e,short d) { static const short pos[9][4]={ {7,5,15,1} ,{5,5,5,3} ,{5,8,-2,14} ,{10,5,2,24} ,{6,11,8,30} ,{8,10,21,31} ,{10,8,30,23} ,{10,7,32,12} ,{10,5,27,2} }; int p; e->obj[0].pt[0].n+=d; while(e->obj[0].pt[0].n<31) e->obj[0].pt[0].n+=9; while(39<e->obj[0].pt[0].n) e->obj[0].pt[0].n-=9; p=e->obj[0].pt[0].n-31; e->obj[0].pt[0].x=pos[p][0]; e->obj[0].pt[0].y=pos[p][1]; e->obj[0].pt[1].x=pos[p][2]; e->obj[0].pt[1].y=pos[p][3]; } |
ヘリは、9パターン(40度)で作ったから、中々面倒でした。
ヘリ本体のスプライトサイズが32x32、主翼が48x48、尾翼が16x16という具合にパーツ毎にサイズが違うので、ズレを座標計算するのが中々めんどいです。
座標のズレを必要としない画像パターンを最初から準備すれば楽なんですが。
ただ、そうすると無駄にパターンサイズが大きくなってしまいます。
つまり、メモリ効率が悪くなります。
あと、スプライトサイズが大きいほど、処理も食います。
そういえば、上のキャプチャを取って初めて気付きましたが、プロペラの影の座標がズレてる・・・
影は、スプライトの1/2サイズなので、ズレ座標も1/2しなければいけないけど、それが漏れていたっぽい。早めに気付けて良かった。画面キャプチャを取ってみて初めて気づくバグが稀によく有るので、この開発日記を書く作業は結構有意義かもしれません。
0 件のコメント:
コメントを投稿
注: コメントを投稿できるのは、このブログのメンバーだけです。