目的はインベーダーのような縦×横の数キャラがまとまって動くようにしようとしています。
まず敵を横1列(図左)だけ作り判定を実装したところ上手く動いたのですが、2列(図右)にしたところ判定を通らず画面外へ出てしまいました。
試しに最下敵の両端の敵だけ判定をとれるように配列に直接数値を代入してみても失敗でした。
この場合、列ごとに配列を作っていったほうがよいのでしょうか?しかし、同じ機能をもつ敵なのに何度も作っていては無駄になってしまいますよね。
#define CHARACTER_MAX 10//表示するキャラクタの数(.h)
//-----------------------
// 敵移動(en_10pt[キャラ数][ポリゴンの各頂点])
//-----------------------
void EnMove(void){
int i,ch;
//敵移動速度
static int en_move = 2;
//左右反転
for(ch = 0;ch < CHARACTER_MAX ; ch++){
if(en_10pt[ch][0].x < 24 || en_10pt[ch][1].x > 306){
en_move = -en_move;
}
}
//移動
for(i = 0;i < 4; i++){
for(ch = 0;ch < CHARACTER_MAX; ch++){
//もしflgが0(そのキャラが消滅してないの)なら移動
if(en_10pt[ch][i].flg == 0){
en_10pt[ch][i].x += en_move;
}
}
}
}
//-----------------------------
//ポリゴンのセット
//-----------------------------
int i,ch;
//敵キャラ縦横
static float width_x1 = 24 , width_x2 = 48 , height;
//敵キャラ
for(ch = 0;ch < CHARACTER_MAX;ch++)
{
//0キャラ目以降は30間隔で配置
if(ch != 0)
{
width_x1 = width_x1 + 30;
width_x2 = width_x2 + 30;
}
//2列目
if(ch == 5)
{
height = 14;
width_x1 = 24;
width_x2 = 48;
}
en_10pt[ch][0].x = en_10pt[ch][2].x = width_x1;
en_10pt[ch][0].y = en_10pt[ch][1].y = 226 - height;
en_10pt[ch][1].x = en_10pt[ch][3].x = width_x2;
en_10pt[ch][2].y = en_10pt[ch][3].y = 240 - height;
for(i = 0 ; i < 4 ; i++)
{
en_10pt[ch][i].z = 0;
en_10pt[ch][i].rhw = 1.0f;
en_10pt[ch][i].diffuse = D3DCOLOR_RGBA(255,255,255,255);
}
en_10pt[ch][0].u = 0; en_10pt[ch][0].v = 0;
en_10pt[ch][1].u = 0.5f; en_10pt[ch][1].v = 0;
en_10pt[ch][2].u = 0; en_10pt[ch][2].v = 1;
en_10pt[ch][3].u = 0.5f; en_10pt[ch][3].v = 1;
}