【问题标题】:libgdx smooth movement of rectangleslibgdx 平滑移动矩形
【发布时间】:2014-04-26 19:57:24
【问题描述】:

我想在 Touching 时平滑地移动两个对象。

这是我的代码:

for(int i = 0; i <96; i++){
    Asstest.rect_pipe_down.y--);
}

这应该将矩形向下移动 96 像素(平滑)

但它只是关闭而没有平滑...

我做错了什么?

如果你触摸,管道应该关闭,但不硬,关闭时应该是平滑的。 但是使用下面的代码,它们就很难关闭...

这里是完整的触摸代码:

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

【问题讨论】:

  • 您必须向我们提供有关您的游戏的更多信息,然后才能有人帮助您。请尽量提供尽可能多的信息。告诉我们你已经尝试过什么。谢谢

标签: android libgdx game-physics


【解决方案1】:

您不能在一次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,其他都是常量。如果您想确保它们最终达到与帧速率无关的特定高度,您可以添加更多变量/常量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多