我已经有了这个代码,当单击鼠标一次时,块会从左向右移动。我想要实现的是,当再次单击鼠标然后再次向右移动时,块再次向左移动,依此类推,依此类推。我将在下面包含图片,以便您了解我想要实现的目标。
到目前为止代码:
boolean hasBeenTapped = false;
public void update(float delta){
velocity.x += speed*delta;
if (Gdx.input.justTouched()){
hasBeenTapped = true;
}
if (hasBeenTapped && getX() < 864){
setX(getX() + velocity.x*delta);
}
if (getX()>864){
setX(864);
}
}
图片:
这就是游戏的开头:http://i.imgur.com/wU6ej1J.png
这就是我点击鼠标时的结果:http://i.imgur.com/i0IpJd4.png
我希望能够多次单击鼠标并使其在这两点之间滑动。
非常感谢。
答案 0 :(得分:0)
我无法测试以下代码,但它应该适合您,或者至少它可以给您一个想法:
boolean control = false;
velocity.x += speed * delta;
if (Gdx.input.justTouched()){
hasBeenTapped = true;
}
if (hasBeenTapped && getX() < 864 && control == false){
setX(getX() + velocity.x*delta);
}
if (getX()>864){
setX(864);
control = true;
hasBeenTapped = false;
}
if (hasBeenTapped && getX() == 864 || getX() < 864 && control == true){
setX(getX() - velocity.x * delta);
}
if (getX()< 0){
setX(0);
control = false;
hasBeenTapped = false;
}
答案 1 :(得分:0)
如果速度是块的当前速度,您可以在每次点击时简单地反转它,然后块将以相反的方向移动:
if (Gdx.input.justTouched()){
hasBeenTapped = true;
speed = - speed;
}
如果您想在到达边界时也反转方向:
if (getX()<0 || getX()>864){
speed = - speed;
}
您还需要左边检查:
if (getX()<0) {
setX(0);
}
在检查左边界或右边界时你还应该考虑块的宽度,否则就会有一部分块在边界之后。
答案 2 :(得分:0)
为尽可能简化此操作,您可以使用钳位功能确保您的块始终在您想要的范围内。我将hasBeenTapped
更改为shouldMove
,因为我认为它可能会在以后变得更复杂的情况下进行测试。
boolean shouldMove = false;
public void update(float delta){
if (Gdx.input.justTouched()){
shouldMove = true;
speed *= -1; //negate the speed to reverse directions
}
if (shouldMove)
setX( Math.clamp(getX() + speed*delta, 0, 864) );
}
}