我有代码在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。帮助将不胜感激!
答案 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
值应该只是精灵的位置(以保持其位置)