コード例 #1
0
ファイル: Enemy.cs プロジェクト: suittizihou/Agar.io-modoki-
        /// <summary>
        /// 自分の近くに餌があったらそれを取りに行く動き
        /// </summary>
        private void FoodEatMove()
        {
            // どんどん餌に近づいていく
            transform.Position -= Vector2.Normalize(transform.Position - findFoodPos) * Speed(speed, scale.X);

            // 自分の座標と餌の座標が5ドット以下なら通常行動に移行
            if (Vector2.Distance(transform.Position, findFoodPos) <= 5f)
            {
                mode = EnemyMoveMode.NormalMove;
            }
        }
コード例 #2
0
ファイル: Enemy.cs プロジェクト: suittizihou/Agar.io-modoki-
        private Vector2 findFoodPos;  // 見つけた餌の座標を入れておくためのリスト

        public Enemy(GameManager gameManager)
            : base(gameManager)
        {
            id  = ObjectID.Character;
            Tag = CharacterID.Enemy;
            drawStruct.textureName = Tag;
            drawStruct.color       = new Color(random.Next(0, 255), random.Next(0, 255), random.Next(0, 255));
            transform.Position     = new Vector2(random.Next(0, Screen.MapWidth), random.Next(0, Screen.MapHeight));
            radius = new Vector2(16f);
            speed  = 2f;
            scale  = new Vector2((float)random.NextDouble() * (5 - 1) + 1);

            mode = EnemyMoveMode.NormalMove;

            findFoodInterval = random.Next(180, 600);    // 3~10秒の間で固有のインターバルを決定

            //// ゲームプレイで呼ばれたら非同期処理開始
            //if(GetScene == SceneID.GamePlay)
            //{
            //    FindFood();
            //}
        }
コード例 #3
0
ファイル: Enemy.cs プロジェクト: suittizihou/Agar.io-modoki-
        /// <summary>
        /// 餌を見つける
        /// </summary>
        private void FindFood()
        {
            List <Vector2> FoodPos = new List <Vector2>();

            // 餌を入れる
            foreach (GameObject food in GameObjectManager.FindAll(CharacterID.Food))
            {
                // 餌と自分との距離が301ドット以上離れているならリストに入れない(軽くするため、、、たぶん軽くなるはず)
                if (Vector2.Distance(food.transform.Position, transform.Position + CompVector2.ScaleConversion(scale, radius)) >= 301f)
                {
                    continue;
                }

                // 餌の座標を個別に保存する
                FoodPos.Add(food.transform.Position);
            }

            if (FoodPos.Count != 0)
            {
                // ソート(バグあり)
                FoodPos = FoodPos.OrderBy(o => CompVector2.MinVector2(transform.Position, o.X, o.Y)).ToList();

                // 見つけた餌の座標の自分から一番近いところを入れる
                findFoodPos = FoodPos[0];

                // 餌との距離が0ドット未満になったら中をクリアする
                if (Vector2.Distance(transform.Position, FoodPos[0]) < 0)
                {
                    FoodPos.RemoveAt(0);
                }
            }

            // 近くに餌があったら食べに行く
            if (FoodPos.Count != 0)
            {
                mode = EnemyMoveMode.EatMove;
            }
        }