我已经有了这样的代码,当鼠标单击一次时,该代码使块从左向右移动。我想要实现的是,当再次单击鼠标时,块再次向左移动,然后再向右移动,等等。我将包括下面的图片,所以你有一个想法,我正在努力实现。
目前为止的代码:
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
我希望能够多次点击鼠标,并使它在这两点之间滑动。
非常感谢。
发布于 2014-10-23 18:34:46
我无法测试以下代码,但它应该适合您,或者至少可以给您一个想法:
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;
}发布于 2014-10-23 18:37:39
如果速度是块的当前速度,您可以简单地在每个点击上反转它,这样块就会向相反的方向移动:
if (Gdx.input.justTouched()){
hasBeenTapped = true;
speed = - speed;
}如果您在到达边界时也想倒转方向:
if (getX()<0 || getX()>864){
speed = - speed;
}此外,您还需要左绑定检查:
if (getX()<0) {
setX(0);
}在检查左界或右界时,还应考虑块的宽度,否则,块的一部分将被绑定。
发布于 2014-10-24 12:55:06
为了尽可能地简化这一点,您可以使用线夹函数来确保块始终在您想要的范围内。我将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) );
}
}https://stackoverflow.com/questions/26533982
复制相似问题