在LibGdx中跟随路径

3

我有一段输出libGdx路径的代码:

public Target(Vector2 villager, Vector2 target){
      pathFinder = new IndexedAStarPathFinder<Node>(LevelManager.graph, false);

        int startX = (int) villager.x;
        int startY = (int) villager.y;

        int endX = (int) target.x;
        int endY = (int) target.y;

        Node startNode = LevelManager.graph.getNodeByXY(startX, startY);
        Node endNode = LevelManager.graph.getNodeByXY(endX, endY);

        pathFinder.searchNodePath(startNode, endNode, new HeuristicImp(), resultPath);
        Gdx.app.log("Path", ""+ resultPath.getCount());

  }

我的问题是,除了使用转向行为之外,是否有一种使用resultPath来实现运动的方法?有没有简单易懂、易于实现的方法?我说的是根据输出路径移动精灵的x和y坐标。希望能得到帮助!

1个回答

1

你只需要将精灵从其 currentPosition 移动到 nextPosition - 你可以将这些值存储在 Vector2 类实例中。

你将在你的 render() 方法中更新精灵的位置,如下所示:

    Vector2 currentPosition, nextPosition;
    final float SPEED; //how fast sprite will be moved

    //render()
    Vector2 step = nextPosition.cpy().sub(currentPosition).nor().scl(SPEED);
    sprite.setPosition(sprite.getX() + step.x, sprite.getY() + step.y);

那么您需要检查您的精灵是否达到了nextPosition(或者它的距离是否足够小),如果是,您必须设置新的nextPosition值。

    if(nextPosition.cpy().sub(sprite.getX(), sprite.getY()).len() < SOME_LENGTH) {
        nextPosition = getNextPosition();

如果没有新的nextPosition可用,则新的nextPosition值应该只是精灵的位置(以保持其原位)。

结果路径(resultPath)在哪里呢?您是在添加连接时循环遍历吗?还是您以某种方式解释整个路径?我不明白路径如何转换为下一个位置(nextPosition)。 - itsmetheperson
作为“nextPosition”,您应该仅保留路径的下一个节点 - 整个路径应该保存在另一个变量中。 - m.antkowicz
有关 Node 到 Vector2 的转换发生在哪里的任何提示? - itsmetheperson
1
节点必须要有保存xy坐标的地方,所以你只需要获取节点的位置就可以得到向量。 - m.antkowicz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接