ゲームが作れるようになるまでがんばる日記

ゲーム制作のことを中心にゲームに関することを書いています

プレイヤーの無敵時間

プレイヤーと障害物の当たり判定を処理したところ、障害物が連続でヒットしてあっという間にゲームオーバーになってしまう場合があるのが判明。
ということで、一回障害物に当たったら一定時間、障害物に当たらないようにプレイヤーに無敵時間を作るようにした。
まあ、処理としては簡単で、一回ヒットしたら無敵時間のカウンタを設定して、カウンタが0になるまでヒット処理を行わないようにしただけ。

int count = 0; // 無敵時間のカウンタ
bool isHit = false; // ヒットしたかのフラグ 障害物と当たったらtrueになる

if (isHit && count == 0) {
    // 当たったときの処理
    count = 30; // 無敵時間をセット
}

if (count > 0) {
    --count;
    if (count <= 0) {
        // 無敵時間の終わり
        count = 0;
        isHit = false;
    }
}

無敵の実装は簡単にできたが、無敵時間の長さの調整が難しい。長すぎるとゲームが簡単になってしまうし、短すぎるとまた障害物に連続でヒットしてしまい難しくなってしまう。プレイしていて違和感なく自然な感じの無敵時間にするのはなかなか難しい。テストプレイを重ねて調整していくしかない。