Я создаю самодельный игровой движок для Android, и у меня возникают проблемы с повторным использованием растрового холста:
Видимые игровые объекты получают основной холст в каждом кадре, чтобы они могли рисовать себя статическим растровым изображением или спрайтом. Пока все работает нормально.
Спрайт состоит из двух растровых изображений. Первый содержит полную последовательность рисунков, а второй динамически рисуется через файл Canvas(bitmap)
. Результирующее растровое изображение и его холст создаются в конструкторе спрайтов, чтобы избежать перераспределения в цикле отрисовки.
Я повторно использую эти спрайты для каждого объекта, которому требуется одна и та же последовательность рисунков. У этих спрайтов также есть функция, позволяющая получить растровое изображение, содержащее другую позицию последовательности рисунков. Итак, если объект хочет, чтобы спрайт находился в другом месте, вызывает свою функцию для получения растрового изображения и отрисовки на основной холст.
Итак, проблема в том, что все объекты, использующие один и тот же спрайт, в конечном итоге рисуют одно и то же изображение.
В видимом игровом объекте:
if(spriteDelay > 0) img = sprite.getDelayedBitmap(spriteDelay); else img = sprite.getCurrentBitmap(); canvas.drawBitmap(img, null, focusLocation, null);
В спрайте:
currentBmpCanvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR); currentBmpCanvas.drawBitmap(scaledImage, delayedIni, fin, null); return currentBmp;
Если я создаю новое растровое изображение результата и новый холст в возвращаемой функции, все работает нормально:
currentBmp = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
currentBmpCanvas = new Canvas(currentBmp);
Я предполагаю, что все растровые изображения не рисуются до тех пор, пока onDraw() не завершится, поэтому есть ли способ решить эту проблему без перераспределения растрового изображения в каждом цикле?
Спасибо!