追逐,区域范围

时间:2013-05-21 00:00:28

标签: xna game-ai

这里有一张图片(我不能发布)显示我将要在XNA游戏中做什么,我想检查玩家是否在区域范围内,如果是,则攻击玩家,我尝试使用检查射线,但它是奇怪的,并给出空结果,因为玩家必须在敌人面前,所以他可以被检测到! ![在此输入图像说明] [1]

if (enemyRay.Intersects(cci.CharacterController.Body.CollisionInformation.BoundingBox) <= 200)
        {
            RunController(dwarfAnimatior, dwarfwalk);
            dwarfChrachterController.Body.ApplyImpulse(dwarfChrachterController.Body.OrientationMatrix.Forward,
              Vector3.Normalize(enemyRay.Direction) * 50.0f);
            if (enemyRay.Intersects(cci.CharacterController.Body.CollisionInformation.BoundingBox) <= 50)
            {
                sound.playAh();
            }
        }

1 个答案:

答案 0 :(得分:0)

你需要做两件事:

  1. 检查玩家位置与敌人之间的距离 位置。

  2. 检查玩家与敌人之间的线所形成的角度。 指向玩家视线方向的线条小于 180degrees。

  3. 第一个很简单:

    bool isCloseEnoughToAttack = Vector.Magnitude( Math.abs(player.position - enemy.position) ) < distanceToStartAttacking
    

    第二个稍微复杂一些。只要您不需要特别关注“玩家前方”的含义,您可以通过检查Dot Product是否大于0来相当容易地检查角度是否落后:

    bool isInFrontOfPlayer = Vector.DotProduct(Vector.Normalize(player.position - enemy.position), player.lookAtDirection) > 0 
    

    注意 - 这段代码是psudeocode,我不知道你的变量/库的确切命名;但它应该非常相似。