【问题标题】:Speed of objects in libGDXlibGDX 中对象的速度
【发布时间】:2020-05-14 08:03:24
【问题描述】:

在 libGDX 中以给定速度移动游戏中对象的正确方法是什么?例如。我在屏幕底部有一个圆圈,我想以每秒 10 像素的速度将它移动到顶部。所有手机都有不同的速度,所以每部手机上渲染功能的增量时间都不同,我该怎么做?

【问题讨论】:

    标签: java android android-studio libgdx


    【解决方案1】:

    我不确定你的意思是什么:

    所有手机都有不同的速度,所以每部手机渲染功能的增量时间是不同的...

    但我认为你对渲染过程中delta值的理解是不正确的。 您可能已经知道,render 方法每秒被调用多次,每次完成对 render 方法的调用后,屏幕都会更新。通过查看Gdx.graphics.getFramesPerSecond()可以查到render方法被调用了多少次。那么 delta 值的用途究竟是什么? delta 只是当前帧(此渲染调用)和最后一帧(当前帧之前的渲染调用)之间的时间跨度,以秒为单位。

    从物理学我们知道distance = velocity * time

    因此,要以每 1 秒 10 个单位的距离移动对象(单位可以是像素、米等……这实际上取决于您的相机和世界渲染逻辑),我们必须计算正确的行进距离对于当前帧。我们知道速度和经过的时间 (delta)。我们可以像这样计算下一个位置

    public void render(float delta) {
        float velocity = 10.0f; // actually 10.0units / 1s
        position = position + velocity * delta; // position can be circle.y to travel up
    }
    

    【讨论】:

    • 我的问题可能不够准确。增量是指一个渲染函数到下一个渲染函数之间的时间。通过电话速度,我的意思是......嗯......例如。一部手机可以生成 2 FPS,所以如果我想要每秒 10 个像素的对象,我必须在每帧中移动 5 个像素的对象。但如果另一部手机有 10 FPS,我必须每帧移动对象 1 个像素。而且我不知道如何测量 FPS,但我找到了函数 Gdx.graphics.getDeltaTime()。所以我可以移动我的对象 +=velocity*Gdx.graphics.getDeltaTime()。
    【解决方案2】:

    您可以使用 libGDX 方法设置增量时间:

    world.step(Gdx.graphics.getDeltaTime());
    

    render() 方法的末尾。这允许 libGDX 管理 FPS

    要根据需要调整对象速度,您可以使用每米像素系数:http://seanballais.github.io/blog/box2d-and-the-pixel-per-meter-ratio/

    【讨论】:

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