Ejemplo n.º 1
0
        /// <summary>
        /// 当たり判定を行う
        /// </summary>
        /// <param name="ch">当たり判定を行うキャラクタ</param>
        private void HitTest(GameCharacter ch)
        {
            // 当たり判定
            var checkChara = hitTestArray[ch.GetIndex()];

            // 何にも当たっていなかった場合
            if (checkChara == null)
            {
                hitTestArray[ch.GetIndex()] = ch;
                return;
            }

            // 当たっていた場合
            checkChara.UpdateHitPoint(ch);

            // もともとindexの位置にあったキャラクタ
            if (!checkChara.IsAlive())
            {
                hitTestArray[ch.GetIndex()] = null;
            }

            // 当たり判定対象のキャラクタ
            if (ch.IsAlive())
            {
                hitTestArray[ch.GetIndex()] = ch;
            }

            // indexの位置のキャラクタのHPが残っていた場合、同じ位置に描画しなおす
            if (hitTestArray[ch.GetIndex()] != null)
            {
                hitTestArray[ch.GetIndex()].UpdateDrawing();
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// 自機以外のキャラクタの移動
        /// </summary>
        private void MoveCharacterExceptShip()
        {
            foreach (var ch in gameCharacters)
            {
                // 速度変更が必要な場合はキャラクタの移動速度を変える
                if (changeSpeed)
                {
                    ch.ChangeSpeed(CalcMoveSpeed());
                }

                // 移動前のindexの配列の中身を消す
                hitTestArray[ch.GetIndex()] = null;

                ch.Move();

                if (!ch.IsAlive())
                {
                    continue;
                }

                HitTest(ch);
            }

            // 画面にShipの弾は一つだけ
            if (shipBullet != null && !shipBullet.IsAlive())
            {
                shipBullet = null;
            }
        }