Android smooth game loop


У меня проблемы с плавной прокруткой в ​​OpenGL (тестирование на SGS2 и ACE)
Делал простые приложения - только фиксированная скорость горизонтальной прокрутки изображений, или только одно изображение (плеер) двигающееся с помощью акселератора, но движение не плавное :-(
Я пробовал много разных кодов, но не получил удовлетворения...

Сначала я попробовал работать с GLSurfaceView.RENDERMODE_CONTINUOUSLYи поместил весь код в onDrawFrame:

    public void onDrawFrame(GL10 gl) 
    {
      updateGame(gl, 0.017f);
      drawGame(gl); 
    }

это самое простое и абсолютно гладкое!! - но это зависит от аппаратной скорости (= бесполезно)


    public void onDrawFrame(GL10 gl) 
    { 
      frameTime = SystemClock.elapsedRealtime();        
      elapsedTime = (frameTime - lastTime) / 1000; 
      updateGame(gl, elapsedTime);
      drawGame(gl); 
      lastTime = frameTime; 
    }

это лучше всего, но это не так плавно, как предыдущее, иногда щелкает


секунда, которую я пробовал GLSurfaceView.RENDERMODE_WHEN_DIRTY, в onDrawFrame i иметь только объекты рисования и этот код в отдельном потоке:

   while (true) 
   {
     updateGame(renderer, 0.017f);
     mGLSurfaceView.requestRender();
     next_game_tick += SKIP_TICKS;
     sleep_time = next_game_tick - System.currentTimeMillis();
     if (sleep_time >= 0) 
     {
       try 
       {
          Thread.sleep(sleep_time);
       } 
       catch (Exception e) {}
       }
       else 
       {
         Log.d("running behind: ", String.valueOf(sleep_time));
       }
     } 

это не плавно, и это не проблема с "отставанием"


Моя цель - плавное движение изображения, как в первом примере кода выше.

Возможно, ошибка где-то в другом месте, чем я искал. Пожалуйста, может кто-нибудь помочь мне с этим?
Лучше использовать RENDERMODE_WHEN_DIRTY или RENDERMODE_CONTINUOUSLY?

Спасибо.

19
задан Commanche 25 May 2012 в 09:56
поделиться