libgdx简单游戏口吃很多

时间:2015-12-16 17:37:02

标签: java performance libgdx

我刚开始使用libgdx,因此我创建了一个简单的测试应用程序,其中图像只是移动。问题是,即使它是一个极其简单的游戏,图像在移动时也会出现很多口吃。这是代码:

<!-- Defines how wide the opt-in will be and centers everything -->
#mc_embed_signup {
    width: 880px;
    margin: auto auto !important;
}

<!-- Moves the form to the left and sets the width -->
#mc_embed_signup input.email {
    float: left !important;
    width: 700px !important;
}

<!-- Defines the height of the div surrounding the form -->
#mc_embed_signup .mc-field-group {
    min-height: 20px !important;
}

<!-- Moves the button to the right, removes the rounded corners, pushes the button up 45px -->
#mc_embed_signup input.button {
    background: #bbcf14 !important;
    color: #fff;
    font-weight: 600;
    display: inline-block !important;
    border-radius: 0px !important;
    float: right !important;
    margin-top: -45px;
}

实体类:

public class Game extends ApplicationAdapter {

private Entity e;
private OrthographicCamera camera;
private SpriteBatch batch;

@Override
public void create () {
    batch = new SpriteBatch();
    e = new Entity(50,50,"badlogic.jpg");
    camera = new OrthographicCamera();
    camera.setToOrtho(false, 480, 800);
    camera.update();
}

@Override
public void render () {

    Gdx.gl.glClearColor(1, 0, 0, 1);
    Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
    camera.update();

    e.setX(e.getX()+100 * Gdx.graphics.getDeltaTime());
    batch.setProjectionMatrix(camera.combined);
    batch.begin();
    e.draw(batch);
    batch.end();
}

有人可以解释为什么这是口吃吗?

1 个答案:

答案 0 :(得分:1)

getDeltaTime()在多个框架上进行平滑,因此如果平均框架需要.016 seconds,并且突然有一个框架需要.030 seconds,那么getDeltaTime()将只返回.016 }。所以实际上游戏已经进展.030秒,但你的移动乘以.016

getRawDeltaTime()为您提供自上一帧以来的实际时间。尝试使用它作为乘数。否则尝试记录两者并查看是否存在差异。

使用平滑getDeltaTime()的好处是当帧丢失发生时,游戏仍然可以播放。使用getRawDeltaTime()时,如果下一帧突然出现第二次传递,那么您的速度将乘以1而不是.016,并且可能会立即进入屏幕或错过碰撞检测。