我刚开始使用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();
}
有人可以解释为什么这是口吃吗?
答案 0 :(得分:1)
getDeltaTime()
在多个框架上进行平滑,因此如果平均框架需要.016 seconds
,并且突然有一个框架需要.030 seconds
,那么getDeltaTime()
将只返回.016
}。所以实际上游戏已经进展.030
秒,但你的移动乘以.016
。
getRawDeltaTime()
为您提供自上一帧以来的实际时间。尝试使用它作为乘数。否则尝试记录两者并查看是否存在差异。
使用平滑getDeltaTime()
的好处是当帧丢失发生时,游戏仍然可以播放。使用getRawDeltaTime()
时,如果下一帧突然出现第二次传递,那么您的速度将乘以1而不是.016
,并且可能会立即进入屏幕或错过碰撞检测。