2012年4月19日木曜日

ヘリ旋回

ヘリを旋回させた時のハネの座標を計算する作業が終了。

何のこっちゃ?
ですね。

ヘリが回転(旋回)する時、主翼(一番大きいプロペラ)の中心点を軸にして機体を回転させるのですが、その際に本体と尾翼の位置を求める作業です。

具体的には、以下のロジックの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 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。

合理的ではないものを作りたい

ここ最近、実機版の東方VGSの開発が忙しくて、東方VGSの曲追加が滞っています。 東方VGS(実機版)のデザインを作りながら検討中。基本レトロUIベースですがシークバーはモダンに倣おうかな…とか pic.twitter.com/YOYprlDsYD — SUZUKI PLAN (...