2D渲染引擎中的脏矩形技术

2D游戏技术其实都已经很古老了,主要包括像素运算,Blt,脏矩形等一些技术。 所谓脏矩形技术,就是哪里脏了,就(仅仅)把脏了的那块区域重绘。而不是每次直接性的重绘。 其基本条件是:脏矩形的计算和绘制的代价小于直接性重绘。换句话说,如果一个屏幕每一帧变化的东西太多的话,就不值得用这个古老的算法了。 脏矩形要解决的两个问题是: (1) 什么叫脏,即什么情况下会弄脏 当我们的游戏中的元素(通常是RenderObject)发生位置,大小,方向,动画,添加,删除等操作时,那么该元素原来对应的区域会弄脏,同时,新对应的区域也同样被弄脏。 (2) 弄脏的区域该怎么办 把场景分成一个一个的格子(比如12864或者6432,矩形格或菱形格); 每个格子,有一个是否脏的标记,以及其上的RenderObject列表; 每个RenderObject,可以保存一个对应的格子列表(当然,也可以计算,并且,实际上有两个格子列表,变化之前和变化之后分别对应一个格子列表,对于变化前的,对应的格子列表中的每个格子应当删除该物体,对于变化后的,对应的格子列表中的每个格子应当添加该物体) 每次绘制时,按照某种顺序,绘制脏了的格子; 每个脏了的格子,按照某种顺序,将其上的RenderObject裁剪绘制到格子的区域上; 关于脏矩形技术的必要性,cloud在《我的编程感悟》一书中已经有了详细的论证。此外,书中提到的关于Blt的汇编优化,逆向画家算法,图像压缩,精灵优化,滚屏优化,以及限制内存大小的思想,都是2D游戏值得借鉴的。

异或运算XOR的一些相关技巧

异或运算(XOR)特点: X xor X = 0 X xor 0 = X X xor Y = Y xor X (X xor Y) xor Z = X xor (Y xor Z) 利用异或可以巧妙地实现一些玩意,例如: 不用中间临时变量交换两个整数; XOR linked list:只用一个指针实现双向链表