我想在触摸时平滑地移动两个物体。
这是我的代码:
for(int i = 0; i <96; i++){
Asstest.rect_pipe_down.y--);
}
这应该将矩形96像素向下移动(SMOOTH)
但它没有平滑就关闭......
我错了什么?
如果你触摸,管道应该关闭,但不要硬,平滑,如果它们关闭。 但是通过以下代码,他们只是努力接近......
以下是完整的代码:
if(Gdx.input.isTouched()){
Assets.rect_pipe_down.y = 512 - 320/2;
Assets.rect_pipe_up.y = -320 + 320/2;
for (int i = 0; i < 96; i++){
smoothTime = TimeUtils.millis();
if(TimeUtils.millis() - smoothTime > 10) {
Assets.rect_pipe_down.y--;
Assets.rect_pipe_up.y++;
batch.begin();
batch.draw(Assets.region_pipe_down, Assets.rect_pipe_down.x, Assets.rect_pipe_down.y);
batch.draw(Assets.region_pipe_up, Assets.rect_pipe_up.x, Assets.rect_pipe_up.y);
batch.end();
}
}
closed = true;
}
答案 0 :(得分:0)
您无法在一次render()
调用中多次渲染,一次调用仅用于绘制一帧。在您当前的代码中,后面的图像只会覆盖以前的图像。
你可以做的是有一个变量,它存在于帧之间,它存储管道当前是否正在关闭,速度的常量和一些条件告诉它们何时可以停止 - 也许当它们距离每个都有一定的距离时其他,不知道你想要什么。无论如何,这就是我在我的例子中使用的。
然后在render()
方法中,在绘制任何内容之前,您可以这样做:
if (closing) {
Assets.rect_pipe_down.y -= CLOSE_SPEED * delta;
Assets.rect_pipe_up.y += CLOSE_SPEED * delta;
if (Assets.rect_pipe_down.y - Assets.rect_pipe_up.y < TARGET_DIST) {
Assets.rect_pipe_down.y = Assets.rect_pipe_up.y + TARGET_DIST;
closing = false;
}
}
此处,closing
是您希望它们开始关闭时设置为true
的变量,其他变量是常量。如果你想确保它们最终在一个独立于帧率的特定高度上,你可以添加一些变量/常量。