public void update(float delta){
position.x = getX();
if(Gdx.input.justTouched()){
for(;position.x < 864; position.x = position.x + 0.5f){
setX(getX() + 3f*delta);
}
}
}
上面的代码显示了一个循环,它使一个块移动,就像从屏幕一侧到另一个边缘的角色,当它到达864的x坐标时停止。循环运行正常,当它在它自己的上面但是它我编译游戏后立即运行。我想要它做的是在屏幕上的任何地方单击鼠标时运行循环。但实际发生的是它只运行一次循环,我必须在循环完成之前多次单击鼠标,并且该块位于屏幕的另一侧(下图)。有人可以说明我将如何设置它以便它运行整个循环并通过单击鼠标从左到右移动块。
非常感谢。
图片: 这是块开头的地方:http://i.imgur.com/wU6ej1J.png 这就是我希望它在点击鼠标时结束的结果:http://i.imgur.com/i0IpJd4.png
答案 0 :(得分:1)
你不能在update
中使用这样的循环,因为它们会阻止渲染循环。渲染循环已经提供了循环,因此您只需要在每次调用时增加它以进行更新。保持一个布尔值来决定你的运动是否需要开始。像这样:
boolean hasBeenTapped = false;
public void update(float delta){
if (Gdx.input.justTouched())
hasBeenTapped = true;
if (hasBeenTapped && getX() < 864)
setX(getX() + 3f*delta);
}
如果你想使用scene2d,那么它有自己的动作系统可以为你处理这些东西,可能比这更直观。我个人使用scene2d仅用于UI的东西,因为我觉得设置游戏代码太费时间/限制。