我有在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
值应该只是精灵的位置(将其保持在适当的位置)