我是libgdx游戏编程的新手,我想创建一个RPG类型的游戏 .
我想让玩家朝着鼠标/触摸位置移动 .
我已经计算出了这样做的合理方法,但似乎玩家一次只能移动一帧,这意味着玩家需要多次点击才能到达正确的位置,而不是走到点击位置框架框架只需点击一下即可 .
我的代码:
Gdx.input.setInputProcessor(new Input(){
public boolean touchDown(int screenX, int screenY, int pointer, int button) {
projected = new Vector3(screenX, screenY, 0);
cam.unproject(projected);
if(projected.x != position.x || projected.y != position.y){
float pathX = projected.x - position.x;
float pathY = projected.y - position.y;
float distance = (float) Math.sqrt(pathX * pathX + pathY * pathY);
float directionX = pathX / distance;
float directionY = pathY / distance;
position.x += directionX * Speed;
position.y += directionY * Speed;
}
return true;
}
1 回答
每次触摸屏幕时都会调用您的方法(一次) . 您的方法更改位置(一次)
因此,每次触摸屏幕都只会移动您的精灵一次 .
你的
Screen
类有一个方法render(float deltaTime) . 这会被重复调用,参数给出自上次调用以来的时间 . 这使得它成为一种有用的方法,可以执行您需要重复发生的事情(比如更新精灵的位置) .所以你真正想要在
touchDown()
中做的是设置你的精灵的方向(作为你的Sprite对象中包含的字段) . 然后你可以编写类似的方法在你的精灵课程中 . 这几乎就是你写的,但
* deltaTime
确保位置改变的数量只是自上次调用此方法以来所覆盖的距离 .此方法仍然永远不会被调用,因此您需要从
Screen.render(deltaTime)
方法中调用它: