現在、マリオ風の横スクロールアクションを作成しております。
マリオが、左右に炎を発射できるようにしたいのですが、なかなかうまくいきません。
発射はできるのですが、他えば右に発射したとして、弾は右に発射されるのですが、そのあと左を向くと、弾が左に流れて行ってしまいます。左に撃った場合も同じことが起こります。
void DrawFire(int key) {
//発射処理
if (IsBKeyTrigger(key) == TRUE) {
//空きを探す
int i;
for (i = 0; i < MAX_FIRE; i++) {
if (g_stagedata.fires[i].living == FALSE) break;
}
if (i < MAX_FIRE) {
g_stagedata.fires[i].living = TRUE;
if (g_stagedata.hero.turn == FALSE) {
g_stagedata.fires[i].x = g_stagedata.hero.x + IMG_CHIPSIZE;
}
if (g_stagedata.hero.turn == TRUE) {
g_stagedata.fires[i].x = g_stagedata.hero.x - IMG_CHIPSIZE;
}
g_stagedata.fires[i].y = g_stagedata.hero.y;
}
}
//炎の描画と移動
float mv = 350.0f * g_frametime; //移動量計算
for (int i = 0; i < MAX_FIRE; i++) {
if (g_stagedata.fires[i].living == FALSE) continue;
if (g_stagedata.hero.turn == FALSE) {
g_stagedata.fires[i].x += mv;
}
if (g_stagedata.hero.turn == TRUE) {
g_stagedata.fires[i].x -= mv;
}
//マップ当たり判定
AtariInfo atari = CheckBlock(g_stagedata.fires[i].x, g_stagedata.fires[i].y,
g_stagedata.fires[i].x);
if (atari.DR == TRUE || atari.UR == TRUE) g_stagedata.fires[i].living = FALSE;
DrawGraph((int)(g_stagedata.fires[i].x - g_stagedata.scrollx),
(int)g_stagedata.fires[i].y,
g_imghandles.fire, TRUE);
}
}