0

我正在尝试构建一个基于标准 Canvas 绘图的自定义游戏引擎,它类似于 Android View 类,因为可绘制对象具有 onDraw 方法。这个想法是给游戏元素一个画布,在上面绘制自己,然后将其合并到主视图中。我假设标准 Android 视图的幕后发生了类似的事情。

如何创建一个“主视图”,可以将小画布交给子对象,然后将这些画布合并到它自己的绘图中?

注意:子对象不是视图的子类,但“主”视图可以是视图

4

1 回答 1

2

在阅读了Android 源代码View后,我ViewGroup发现了这是如何完成的。当系统在屏幕上绘制视图时,它会生成一个 Canvas,它是整个屏幕的光栅。Canvas 没有被“切割”并提供给子视图以供绘制,而是被翻译和剪辑以适应每个视图。

在绘制特定视图之前,其父级将 Canvas 转换为子级的位置,将 Canvas 剪辑到子级的大小,然后调用.draw(Canvas)该视图。视图不知道画布已被更改,每个视图都像在 (0,0) 处一样绘制。在孩子完成绘画后,画布被平移回其先前的位置。抽象地说,每个视图都认为它是唯一的视图,而实际上每个父级都在重新定位和调整画布大小以将其放置在正确的位置。

所以对于我的情况,我需要做的就是像这样迭代我的每个子对象:

for(MyObject mob : mobjects) {
   final int restoreTo = canvas.save();

   canvas.translate(mob.getX(), mob.getY());
   canvas.clipRect(0, 0, mob.getWidth(), mob.getHeight());
   mob.onDraw(canvas);

   canvas.restoreToCount(restoreTo);
}
于 2012-11-19T23:35:21.843 回答