让我们研究一个移动的子图形,计算变动区域的一个简单的方法就是取得新图片和老图片界线的并集。
| RefreshScreen(Rectangle.Union(sprite.PreviousBounds, sprite.Bounds)); |
这里的RefreshScreen()是一个刷新屏内指定矩形区域的方法。
图6.变化区域为新老边界并集
图7.大的变动量产生大的变化区域
注意 如果新旧坐标之间的变化量很大,或者子图形的尺寸很大,那么这种技术可能会产生一个不必要的大的变化区域,参看图7。
在这种情况下,用单位矩形组合起来表示变动区域,计算子图形的变动区域非常有效。
首先让我们看看新旧边界是否重叠。 如果没有重叠的话,我们可以分别把新旧两个的边界当成是两个独立的矩形来计算。 所以,如7所示方案,把新边界和旧边界作为两个不同的变化区域分别处理。
|
if (Rectangle.Intersection(sprite.PreviousBounds, // Dirty rectangle representing current bounds |
如下图8所示,上面的技术也可以用到不必在乎重画重叠区两次的情况下。
图8变化区域被分为新旧两个边界
现在,让我们看看如何把新旧边界的重叠部分分成单位矩形用来计算变动区域,这样就不会把变动区域重复两次了,意思是所有的单位矩形都是互不相交的。
首先,把新的边界作为整体单位。注意,这包括新旧边界的重叠部分。
变化单位区域1:描述当前边界的变化矩形
| RefreshScreen(sprite.Bounds); |

图9.变动区域被分解为几个单位。
现在,把旧的边界中的不重叠部分分解成为两个独立的单位,见下面的代码:
|
Rectangle rcIx, rcNew; RefreshScreen(rcNew); |
变动区域单位3
|
rcNew = new Rectangle(); if (sprite.PreviousBounds.Y < rcIx.Y) RefreshScreen(rcNew); |
相关专题
- 游戏开发 (2107篇文章)
- 网络游戏攻略 (4329篇文章)
- .NET Framework新手入门 (132篇文章)
- .NET移动与嵌入式技术 (5950篇文章)
- .NET开发手册 (5652篇文章)
- 电信运营商专栏 (4024篇文章)
- Wlan组网----家庭专题 (4184篇文章)
- 网络游戏开发 (141篇文章)
- 游戏策划 (287篇文章)
- 程序设计 (226篇文章)
- vb.net入门——ToolBar 控件的使用 (267次浏览)
- vb.net入门——OpenFileDialog 组件的使用 (75次浏览)
- vb.net入门——FontDialog 组件的使用 (52次浏览)
- vb.net用Graphics画一个五角星 (46次浏览)
- vb.net入门——FolderBrowserDialog 组件的使 (45次浏览)
- vb.net绘制干扰点 (44次浏览)
- vb.net入门——ColorDialog 组件的使用 (41次浏览)
- vb.net巧用ToolTip控件获取鼠标坐标 (39次浏览)
- 用vb.net创建一个鼠标绘图程序 (39次浏览)
- vb.net入门——SaveFileDialog 组件的使用 (38次浏览)



