我有在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。帮助将不胜感激!

最佳答案

您只需要将子画面从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值应该只是精灵的位置(将其保持在适当的位置)

10-07 15:47