0

我是新手。我使用 Canvas 制作了一个简单的游戏。我在 onDraw() 方法中编写了几乎所有的代码,那里有很多计算。在我的代码中 onDraw() 的末尾有一个 invalidate() 方法。这就是我调用重绘视图的方式。如何仅重绘 Canvas 的一部分?主要问题是我在 onDraw() 中有很多计算,它会减慢整个游戏的速度。我尝试使用像这里这样的位图:

创建位图 - stackOverflow

但它并没有解决问题,因为创建位图的过程太慢了。使用 SurfaceHolder 和 Callback 是个好主意吗?我尝试使用它,但我不知道这是否是做我想做的事情的正确方法。有谁能够帮我?如何仅部分重绘我的视图以停止始终通过新计算重绘所选元素(从保存状态绘制它们)?我只想在需要时重绘整个视图。如果有人发布可以解决此问题的代码(甚至可以是两个矩形),那就太好了。

4

2 回答 2

1

尝试在 Class 方法中创建位图并从 onDraw() 调用它们。

   public class DrawView extends View {

         public DrawView(Context context, AttributeSet attributeSet) {
         super.DrawView(context attributeSet)
          //Create your bitmaps in here
         }
   }
于 2013-08-25T20:27:57.473 回答
1

使用相同的位图而不是创建新的位图,并使用矩形(或边界)作为参数调用 invalidate。

在 onDraw 中,您可以调用 canvas.getClipBounds() 以找到要删除的矩形。

此外,为了改进您的代码,请尽量避免在 onDraw 方法上创建新对象。

事实上,如果是重度游戏,可以考虑使用 openGL。为简单起见,您可以使用第三方库,如 libGDX 或 AndEngine。

于 2013-08-25T20:12:54.140 回答