ページ 11

【C# + XNA4.0】自機狙い

Posted: 2014年9月09日(火) 22:35
by goma
お世話になっております。gomaです。
引き続き、C# + XNA4.0で弾幕シューティングを製作中なのですが、今度は自機狙いの処理で行き詰まりました。

敵の動作において、「ある場所まで移動後、しばらく待ってから自機に向かって突進し、ぶつからなかった場合は画面外へ消える(一般的な自機狙い弾と同様)」という動作をするようにしたいのですが、現在の状態では、画面外へ消えることなく、延々と自機を追いかけ続けてしまいます。

自機と敵のなす角度の計算が、自機が移動している間もずっと行われているのが原因と考え、自機追尾開始直前に、敵と自機の座標を(switch文を使っている都合上、ローカル変数の共有ができないため仕方なく・・・)グローバル変数へ保存して次のcase文に移り、そこでグローバル変数に保存した座標を読み出して、角度の計算および移動処理を行うようにもしてみたのですが、それでも正常な動作にはなりませんでした。

何か良い解決策がありましたら、教えていただけると助かります。

コード:

                // Y = 200まで下降し、設定された時間(enemy[i].wait)留まってから自機へ突撃
                    switch (enemy[i].pointFlag) // 軌道切り替えフラグにより制御
                    {
                        case 0:
                            enemy[i].enemyPosY += enemy[i].enemySpeed;

                            if (enemy[i].enemyPosY >= 200)
                            {
                                enemy[i].pointFlag = 1;
                                enemy[i].timerFlag = true; // 待機タイマーカウントアップ開始
                            }
                            break;

                        case 1:

                            float X_Dist; // X座標の距離差
                            float Y_Dist; // Y座標の距離差

                            enemy[i].enemyPosY += 0; // その場で待つ

                            if (enemy[i].timer >= enemy[i].wait) // 設定待機時間を超えたら
                            {
                                // 距離差 = 目標座標 - 現在座標
                                X_Dist = (Player.playerPos.X + Player.playerSize / 2) - (enemy[i].enemyPosX + (enemySize / 4));
                                Y_Dist = (Player.playerPos.Y + Player.playerSize / 2) - (enemy[i].enemyPosY + (enemySize / 4));

                                enemy[i].enemyDeg = (float)(Math.Atan2(Y_Dist, X_Dist) * (180 / Math.PI)); // 角度計算

                                enemy[i].enemyPosX += enemy[i].enemySpeed * (float)Math.Cos(MathHelper.ToRadians(enemy[i].enemyDeg));
                                enemy[i].enemyPosY += enemy[i].enemySpeed * (float)Math.Sin(MathHelper.ToRadians(enemy[i].enemyDeg));
                            }
                            break;
                    }

Re: 【C# + XNA4.0】自機狙い

Posted: 2014年9月09日(火) 22:47
by goma
すみません・・・すぐに自己解決しました。
移動処理だけを次のcase文で処理するようにすればいい話でした。
どうもうまく頭が回っていなかったようです・・・。