【问题标题】:Navigation Graph(for Game Agent) generation/edition toolsNavigation Graph(for Game Agent) 生成/编辑工具
【发布时间】:2021-09-28 01:40:59
【问题描述】:

我正在编写一个 2d 游戏,其中代理必须自动前往大地图的任何地方。
当然,地图上有很多障碍物、几何图形等。

我决定用 NavGraph(导航图)来实现它,并阅读了一篇非常有用、很棒的文章here

几分钟后,我担心手动创建导航图。

我用谷歌搜索了几个小时来查找 NavGraph 生成工具,但什么也没有。 (所有结果都是针对 NavMesh,而不是 NavGraph)

有人帮帮我吗?任何建议或回复将不胜感激。
谢谢。

【问题讨论】:

  • 澄清一下:您是否为NavGraph 使用了第三方库,或者您是否从头开始编写自己的系统?如果是后者,您肯定必须以某种方式自己创建它;这是否意味着编写自定义工具,或调整您的实现以支持其他一些常见格式
  • @Human-Compiler 感谢您的回复,只是想问一下其他人的任何东西是否存在-节省我的时间-
  • 在这种情况下,如果您不知道:请求软件/工具/等的建议是off-topic for stack overflow,因为它会导致固执己见的答案。就特定问题寻求帮助很好,但请求工具或库的问题通常是关闭的。我建议保留有关解决生成导航图的问题,而不是请求工具
  • 此外,如果您可以描述更多关于您当前拥有的内容以及您尝试/完成的内容,它可能有助于生成更多答案。如果您正在使用NavGraph 实现,请参考它,或者快速了解您的实现如何工作,以便人们可以(尝试)提供答案。但请记住,您可能不会收到有关软件/库的建议,因为那是题外话

标签: c++ 2d-games navmesh


【解决方案1】:

我用libpedsim

它提供了一个框架来设置航路点和障碍物:

Ped::Tscene*                    pedscene;
Ped::Twaypoint*                 w1;
Ped::Tobstacle*                 o;

路点只是通过随机采样创建的——我们创建了一个纹理,其中红色表示它被阻挡,否则单元格是空闲的。 hacky 实现看起来像这样并且运行良好:

// setup
pedscene = new Ped::Tscene(-200, -200, 400, 400);

loadMap();

srand(time(NULL));


int x;
int y;

for (int i = 0; i<agnentCount_/10; i++)
{ 
    Ped::Tagent *a = new Ped::Tagent();

    while(true)
    {
        x = rand() % 99;
        y = rand() % 99;
        
        if(texData[y * tex_->getWidth() + x][0]==255)
        {
            break;
        }

    }
    a->setPosition(
        x, 
        -y, 
        0.2);

    while(true)
    {
        x = std::rand() % 99;
        y = std::rand() % 99;
        
        if(texData[y * tex_->getWidth() + x][0]==255)
        {
            break;
        }
    }
    PathFind seeker(
        a->getPosition().x,
        -a->getPosition().y,
        x,
        y,
        tex_->getWidth(),
        tex_->getHeight(),
        texData);

    std::vector<buw::vector2i> path;
    path = seeker.findPath();

    for(std::vector<buw::vector2i>::iterator it = path.begin(); it!=path.end(); it++)
    {
        w1 = new Ped::Twaypoint( it->x(), -it->y(),  5);
        a->addWaypoint(w1);
    }

    pedscene->addAgent(a);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-03
    • 1970-01-01
    • 2010-09-09
    • 1970-01-01
    相关资源
    最近更新 更多