我一直在做一个游戏,其中有多个物体在负'y'中,我已经拿走了arrayList,我正在向下移动主角。但是当相机移动时,角色对象是如果没有顺利移动,他们会在一段时间后得到混蛋。其代码如下:
@Override
public void create() {
camera = new OrthographicCamera(480, 720);
camera.position.set(480 / 2, 720 / 2, 0);
batch = new SpriteBatch();
int i;
this.baloonArrList = new ArrayList<Baloon>();
for (i = 0; i < 3000; i += 300) {
Baloon baloon = new Baloon(200, i);
baloonArrList.add(baloon);
System.out.println(baloon.balloon_y);
}
texture1 = new Texture(Gdx.files.internal("data/sheet_final.png"));
textureRegion1 = new TextureRegion(texture1, 561, 156, 115, 101);
}
@Override
public void render() {
GLCommon gl = Gdx.gl;
Gdx.gl.glClearColor(1, 1, 1, 1);
gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
camera.position.y += 4;
camera.update();
batch.setProjectionMatrix(camera.combined);
batch.begin();
int len = baloonArrList.size();
for (int i = 0; i < len; i++) {
batch.draw(textureRegion1, baloonArrList.get(i).balloon_x,
baloonArrList.get(i).balloon_y, 100, 100);
}
batch.end();
}
那么,我怎样才能使物体的运动平滑。
答案 0 :(得分:2)
我相信您的问题来源如下:
camera.position.y += 4;
您应该将其更改为更小的值,或者更好,根据帧速率的速度进行设置:
camera.position.y += 4 * Gdx.graphics.getDeltaTime();
这样,您的相机将在y方向上每秒移动4个像素,而不是每帧4个像素。 (当然你可能需要增加4以使其更快,但它会保持相当平滑。)
答案 1 :(得分:0)
如果渲染是生涩且不一致的(使用the builtin FPSLogger
来找出你得到的帧速率),那么在渲染过程中会有更多/可变的时间。您应该使用分析器来确定时间的去向。 Eclipse附带的Android DDMS工具非常好用。过于频繁的垃圾收集通常是变量运行时的来源,但最好在尝试修复之前了解正在发生的事情。
那就是说,@ Jyro117建议让你的状态更新独立于帧速率总是一个好主意。