遵循LibGdx中的路径

时间:2016-04-07 09:27:01

标签: java libgdx artificial-intelligence path-finding

我有代码在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 个答案:

答案 0 :(得分: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值应该只是精灵的位置(以保持其位置)