Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何将if语句中的变量用作Rect2D struct的成员?_C++_Variables_Artificial Intelligence_Member_Game Development - Fatal编程技术网

C++ 如何将if语句中的变量用作Rect2D struct的成员?

C++ 如何将if语句中的变量用作Rect2D struct的成员?,c++,variables,artificial-intelligence,member,game-development,C++,Variables,Artificial Intelligence,Member,Game Development,我正在学习计算机游戏编程课程中的人工智能模块,我的任务之一是编写有效的避障转向行为代码。我一直在用Matt Bucklands编程游戏AI的例子来帮助我,但我使用的框架有很大的不同。我没有使用探测盒,而是使用触角,这样它比避障功能更接近墙壁避障功能。我有一个PointInBox函数,而不是LineIntersection函数,它接受矢量2D(触角)和矩形2D(障碍物)。代码遍历障碍物大小并检测该点是否存在碰撞 检测到碰撞后,计算转向力,将代理推离障碍物 我的问题是,我不知道我是否在PointIn

我正在学习计算机游戏编程课程中的人工智能模块,我的任务之一是编写有效的避障转向行为代码。我一直在用Matt Bucklands编程游戏AI的例子来帮助我,但我使用的框架有很大的不同。我没有使用探测盒,而是使用触角,这样它比避障功能更接近墙壁避障功能。我有一个PointInBox函数,而不是LineIntersection函数,它接受矢量2D(触角)和矩形2D(障碍物)。代码遍历障碍物大小并检测该点是否存在碰撞

检测到碰撞后,计算转向力,将代理推离障碍物

我的问题是,我不知道我是否在PointInBox参数中使用了正确的变量,并且我无法计算转向力,因为我不知道如何有效地使用Rect2D结构

我曾尝试将不同的值附加到Rect2D变量“障碍物”上,但我需要获得最接近的障碍物并在Rect2D周围对其进行规范化(我现在真的不知道如何用语言表达我的问题,当涉及到编码时,我已接近初学者/中级)

Vector2D W019435F转向行为::障碍物(Rect2D障碍物)
{
创建触角();
双距离hisip=0.0;
double DistToClosestIP=MaxDouble;
障碍管理者*障碍;
int ClosestObstacle=-1;
矢量2D转向力,点,闭合点;
用于(无符号整数flr=0;flrgetbirders().size();++o)
{           
if(点收件箱(触角[flr],障碍物))
{
if(DistToThisIP=0)
{
矢量2D投影=触角[flr]-闭合点;
SteeringForce=障碍物。法线*投影。长度();
}
}
回舵力;
}
我认为近距离障碍物是至关重要的,它必须是障碍物中的一员,然后标准化并乘以投影长度。但我无法将任何成员附加到障碍上


任何帮助都将不胜感激,谢谢。

我甚至不明白一个
Rect2D
如何足以描述
障碍物(复数,即其中许多障碍物)。也许这就是你所有问题的起点?仔细看一看,这段代码有很多问题。指向
ObstacleManager
的指针未初始化,例如,我甚至不知道单个
Rect2D
如何足以描述
障碍物(复数,即许多障碍物)。也许这就是你所有问题的起点?仔细看一看,这段代码有很多问题。指向
ObstacleManager
的指针未初始化,例如:。
Vector2D w019435fSteeringBehaviours::ObstacleAvoidance(Rect2D obstacles)
{
    CreateFeelers();

    double DistToThisIP = 0.0;
    double DistToClosestIP = MaxDouble;

    ObstacleManager* Obstacle;

    int ClosestObstacle = -1;

    Vector2D SteeringForce, Point, ClosestPoint;

    for (unsigned int flr = 0; flr < feelers.size(); ++flr)
    {
        for (unsigned int o = 0; o < Obstacle->GetObstacles().size(); ++o)
        {           
            if(PointInBox(feelers[flr], obstacles))
            {
                if (DistToThisIP < DistToClosestIP)
                {
                    DistToClosestIP = DistToThisIP;

                    ClosestObstacle = o;

                    ClosestPoint = Point;
                }
            }
        }

        if (ClosestObstacle >= 0)
        {
            Vector2D Projection = feelers[flr] - ClosestPoint;

            SteeringForce =  obstacles.normal * Projection.Length();
        }
    }
    return SteeringForce;
}