【发布时间】:2014-07-21 10:50:35
【问题描述】:
我正在为 Android 创建一个自制游戏引擎,但在重用位图画布时遇到了一些问题:
可见游戏对象在每一帧中接收主画布,因此它们可以使用静态位图或精灵绘制自己。到目前为止一切正常。
精灵由两个位图组成。第一个包含完整的绘图序列,第二个是通过Canvas(bitmap) 动态绘制的。结果位图及其画布在 sprite 构造函数中创建,以避免在绘制循环中重新分配。
我为每个需要相同绘图序列的对象重复使用这些精灵。这个精灵也有一个功能,允许获得一个包含不同位置的绘图序列的位图。因此,如果对象想要精灵在另一个位置调用它的函数来获取位图并绘制到主画布。
所以问题是所有使用相同精灵的对象最终都绘制了相同的图像。
-
在可见的游戏对象中:
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() 完成之前不会绘制所有位图,那么有没有办法在不重新分配每个循环中的位图的情况下解决这个问题?
谢谢!
【问题讨论】:
标签: android android-canvas draw android-bitmap