Я пишу простой движок 2D-игр и отрисовываю различные объекты в заблокированном SurfaceVew, вызывая Canvas.drawBitmap (все то же исходное растровое изображение, но обычно не с масштабированием от 1 до 1 от источника к месту назначения).
Кажется, что все работает должным образом, пока не будет много вызовов на кадр в drawBitmap. Когда это происходит, я иногда вижу срыв (100 мс или около того), сопровождаемый эффектом, который выглядит так, как будто несколько кадров рендеринга произошли вместе, то есть некоторые объекты будут нарисованы дважды в двух местах экрана или пара объектов, движущихся с одинаковой скоростью появится на мгновение ближе друг к другу или дальше друг от друга.
Приложение структурировано следующим образом (упрощено для примера);
initialiseGameObjects();
while(quit==false)
{
processGameLogic(); // update object positions
Canvas c = surface_holder.lockCanvas();
if (c != null) {
drawGameObjects(c); // draw all objects
surface_holder.unlockCanvasAndPost(c);
}
}
Насколько я понимаю, Canvas является держателем для запросов на розыгрыш, которые исполняются при публикации Почты. Предположительно, существует ограничение на количество запросов, которые он может удерживать, и мне интересно, превышаю ли я этот предел (я рисую до ста маленьких растровых изображений в зависимости от того, что отображается на экране в любое время) и непреднамеренно провоцируем некоторые что-то вроде сброса и нарушения двойной буферизации, хотя мне не удалось найти никакой документации, чтобы подтвердить или опровергнуть это.
Кто-нибудь знает, что может происходить?
С уважением,
Стив