1

我一直在制作一个游戏,其中有许多对象处于负“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();

}

那么,我怎样才能使物体的运动平滑。

4

2 回答 2

2

我相信您的问题的根源是以下行:

camera.position.y += 4;

您应该改为将其更改为更小的值,或者更好的是,根据帧速率的速度进行设置:

camera.position.y += 4 * Gdx.graphics.getDeltaTime();

这样,您的相机将在 y 方向上每秒移动 4 个像素,而不是每帧 4 个像素。(当然您可能需要增加 4 以使其更快,但它会保持相当流畅。)

于 2013-03-18T13:16:14.543 回答
0

如果渲染不稳定且不一致(使用内置FPSLogger函数来找出您获得的帧速率),那么在渲染过程中会花费更多/可变的时间。您应该使用分析器来确定时间的去向。Eclipse 附带的 Android DDMS 工具非常好。过于频繁的垃圾收集通常是变量运行时的来源,但最好在尝试修复它之前了解正在发生的事情。

也就是说,@Jyro117 建议让您的状态更新帧速率独立始终是一个好主意。

于 2013-03-18T15:56:30.543 回答