[第10天]叠加处理

      终于到1/3了。今天作者介绍如何处理上次出现的鼠标覆盖的问题。主要原理是把窗口分层。确定图层的相对位置。然后根据位置,从底至上刷新像素。

图层控制:

      以下是图层的主要控制部分。SHEET代表了每个图层的信息,含义如注释。SHTCTL保存控制所有图层的信息。一共支持256个图层。这里的col_inv还不是很理解。大致的作用就是看是否要进行刷新。起到的作用就是透明色效果。比如指定透明色为99,鼠标设定的背景色为99,那么在刷新是遇到99就不刷新。

控制函数:

      不仅为了解决这个问题,还为后面的窗口做准备。作者一下子把窗口相对高度(sheet_updown())也搞定了。最简单的方法是刷新所有的区域。但这样效率不高,画面还闪。因此作者的做法是只刷新窗口移动前后位置的像素。如sheet_refreshsub()的功能。这些函数的实现还是需要进行思考的。

初始化显示:

      因为不是在一个vram上显示,我们要做的是把一个个图层添加到屏幕。同时要分配内存,内存是额外增加的,所以之前的内存管理就在这里起到了很好的作用。但貌似作者没有很好的处理这里的内存释放。

后续:

      这个版本的刷新还不是最完善的。比如没有必要从底到上全部刷新。这些问题在下一天解决。今天成果和代码:

mouse