游戏开发者使用的一种流行的技术就是Color Key技术,当渲染时指定的颜色就被从位图中抽去。 这种技术也称为色度键掩盖,颜色剔除和透明混合。

图3子图形.

图4使用Color Key透明度

图5未使用Color Key透明度
在子图形位图中(图3),非对象区域充满着绛红色,可以被用做color key。 使用或者不使用这种技术的混和效果分别地如图4和图5所示。
透明混合的第一步是建立在渲染时要被掩盖的color key(色度键)。我们需要指定一个精确的色度键值,而不是指定一个范围。
| ImageAttributes imgattr = new ImageAttributes(); imgattr.SetColorKey(Color.Magenta, Color.Magenta); |
如果你不想使用Color类中提供的标准颜色组,你可以按照如下方法来指定红色、绿色和蓝色(RGB)值构造你自己的颜色。
| imgattr.SetColorKey(Color.FromArgb(255, 0, 255), Color.FromArgb(255, 0, 255)); |
另一种我经常用来指定色度值的技术就是直接使用像素值。 这就避开了处理RGB值的必要。 而且,色度值不是硬编码,可以独立的在位图上被改变。
| imgattr.SetColorKey(bmpSprite.GetPixel(0,0), bmpSprite.GetPixel(0,0)); |
现在,让我们看看如何使用我们建立的色度值透明地描画子图形。
| gxOff.DrawImage(bmpSprite, new Rectangle(x, y, bmpSprite.Width, bmpSprite.Height), 0, 0, bmpSprite.Width, bmpSprite.Height, GraphicsUnit.Pixel, imgattr); |
在上面的代码段里,目标矩形被指定为new Rectangle(x,y,bmpSprite.Width,bmpSprite.Height),这里x和y是子图形的所要放置位置的坐标。
通常,在描画的时候,有可能需要伸展或者缩小子图形。 你可以通过调节目标矩形的宽度和高度达到这个目的。 同样,你还可以调节源矩阵来仅仅描画子图形的一部分,即使这并不一定非常有用。
当设置用于你的子图形的位图时,建议考虑一下你的目标设备的色彩解析度。 例如,一个24位色位图在一个12色彩解析度的设备上可能不能渲染;这两种在颜色梯度上的区别可能依赖于选择使用的颜色。 而且当选择要被掩盖的ColorKey时,要保证这个颜色值要处于目标显示支持的颜色范围之内。 记住,它支持精确的ColorKey匹配。
Color Key透明度是.NET Compact Framework支持的唯一的混合技术。
把图象作为嵌入资源
你可以把一个图片资源嵌入到你的部件中去,添加图象到工程中,并且设置它的Build Action属性为" Embedded Resource "。 请参看在线帮助主题" Embedding Resource Files in Applications "获取更多的信息。
然后我们就可以象下面这样使用资源中的内嵌位图了。
| Assembly asm = Assembly.GetExecutingAssembly(); Bitmap bmpSprite = new Bitmap(asm.GetManifestResourceStream("Sprite")); |
Bitmap类支持BMP、JPG、GIF和PNG图像格式。
调整你的着色方法
游戏中的着色程序必须严格的最优化设计以便取得最好的性能。 强制的给屏幕着色将会擦除并重画所有的屏外的子图形,然后使用屏外图象刷屏。 显然,这样做效率很低,因为我们没有必要每次都重画整个屏幕。 在这里,我们的帧速率取决于Compact Framework能够刷新整个屏幕的速率。
一种更好的方法是计算我们的游戏中的子图片的变化的区域,然后只刷新屏幕中这些变化的部分。 子图片可能因为各种原因变化,比如移动、在图象/颜色上变化或者与其他的子图片冲突等。在本章,我们将讨论各种用来有效的计算子图形变化区域的技术。URl收藏 http://www.qqread.com/dotnet/u292184000.html
更多内容请看游戏开发、网络游戏攻略、.NET Framework新手入门专题,或进入讨论组讨论。
相关专题
- 游戏开发 (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次浏览)



