Объекты дергаются при перемещении камеры вниз

Я делаю игру, в которой есть количество объектов с отрицательным значением «y», для которых я взял список массивов, и я перемещаю главного героя в направлении вниз. Но когда камера перемещается вместе с персонажем, объекты не движутся плавно. , они получают рывки через некоторый промежуток времени. Код для этого следующий

@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();

}

Итак, как я могу сделать движение объектов плавным.


person Jagdeep Singh    schedule 18.03.2013    source источник
comment
Возникает ли проблема на Android, рабочем столе или на обоих?   -  person Rod Hyde    schedule 18.03.2013
comment
@RodHyde Это происходит на обоих.   -  person Jagdeep Singh    schedule 18.03.2013


Ответы (2)


Я считаю, что источником вашей проблемы является следующая строка:

camera.position.y += 4;

Вместо этого вы должны изменить его на меньшее значение или, лучше, сделать его основанным на скорости частоты кадров:

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

Таким образом, ваша камера будет перемещаться по оси Y на 4 пикселя каждую секунду, а не на 4 пикселя в каждом кадре. (Конечно, вам может понадобиться увеличить 4, чтобы сделать его быстрее, но он будет достаточно плавным.)

person Jyro117    schedule 18.03.2013

Если рендеринг прерывистый и непоследовательный (используйте встроенный FPSLogger, чтобы узнать, какую частоту кадров вы получаете), то во время рендеринга что-то занимает больше/переменное количество времени. Вы должны использовать профилировщик, чтобы выяснить, куда идет время. Инструменты Android DDMS, включенные в Eclipse, довольно хороши. Слишком частая сборка мусора часто приводит к изменению времени выполнения, но лучше понять, что происходит, прежде чем пытаться это исправить.

Тем не менее, предложение @ Jyro117 сделать ваше обновление состояния независимым от частоты кадров всегда является хорошей идеей.

person P.T.    schedule 18.03.2013