首页 文章

libgdx矩形的平滑运动

提问于
浏览
2

我想在触摸时平滑地移动两个物体 .

这是我的代码:

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;
    }

1 回答

  • 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 的变量,其他变量是常量 . 如果要确保它们最终处于与帧速率无关的特定高度,则可以添加更多变量/常量 .

相关问题