2013-03-18 3 views
1

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

@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

Возникает ли проблема на Android, на рабочем столе или на обоих? –

+0

@RodHyde Он идет на обоих. –

ответ

2

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

camera.position.y += 4; 

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

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

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

0

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

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

Смежные вопросы