Странное поведение Android SurfaceView

if(pauseGame){
    if(update){
        update = false;
        My_static_draw();
    }else{
        try {
           Thread.sleep(160);
        } catch (InterruptedException e) {
           e.printStackTrace();
        }
    }
}else{
   My_Game_draw(); //its load CPU
}

Когда я делаю pauseGame = true;, это work(load CPU ~0%), но я вижу что-то странное на дисплее, меняющем два (или более) изображения, изображение 1, нарисованное в My_static_draw(), и несколько последних изображений в My_Game_draw();


person knotri    schedule 03.05.2014    source источник


Ответы (1)


Я предполагаю, что вы звоните Surface.lockCanvas() перед вызовом кода, включенного в ваш ответ. Если вы это сделаете, вам придется перерисовать всю грязную область (по умолчанию это весь экран).

Вы циклически перебираете предыдущие кадры, потому что SurfaceView имеет двойную или тройную буферизацию. Если вы блокируете и разблокируете, ничего не рисуя, вы просто повторно отправляете ранее нарисованный буфер.

Вы можете исправить это, вообще не вызывая lockCanvas()/unlockCanvasAndPost(), если вам нечего рисовать.

person fadden    schedule 03.05.2014
comment
Если это ответ на ваш вопрос, нажмите на галочку слева от ответа, чтобы отметить его как принятый. - person fadden; 04.05.2014