正文

GDI图形编程(2)

Windows移动游戏开发实战 作者:(美)Adam Dawes


 

3.2.1  使窗体失效

程序清单3-1依赖的是窗体可以自动对其自身进行绘制,绘制发生在窗体第一次被打开时,所以如果利用Paint事件在窗体中进行绘制,那么绘制的图形就会被显示出来。

然而,在一些重要的例子中,需要对窗体一遍又一遍地重绘以使显示在屏幕上的图形运动起来。为了强制窗体进行重绘,需要调用其Invalidate方法。该方法通知GDI当前所有的窗体内容都过期了。所以窗体的Paint事件会再一次被触发以更新窗体。举个简单的例子:在一个Timer控件中,可以调用该方法来更新屏幕上显示的图形。

Invalidate方法还有一个重载,可以只对指定的窗体区域进行重绘,这需要在参数中传递一个Rectangle。我们可以利用该重载只对窗体中实际发生变化的部分进行重绘来提高游戏的性能。在第4章中我们将利用它来对显示更新进行优化。

3.2.2  绘图坐标系

窗体中的位置是使用标准的x轴(水平轴)和y轴(垂直轴)坐标系来确定的。GDI中的函数将使用命名为x和y的参数来获取窗体中要被绘图操作更新的点的位置。

当记录坐标时,要将坐标中的两个值放在括号中,中间以逗号分隔。第一个值是x坐标,第二个值是y坐标。例如,(20,50)表示x坐标为20,y坐标为50的一个点。

GDI使用的坐标系以窗体的左上角(0,0)作为原点,然后坐标轴沿着窗体的宽与高进行延伸,所以窗体右下角的坐标为(Form.Width–1, Form.Height–1)。

不管窗体的AutoScaleMode属性是如何设置的,所有的坐标都以像素为单位。如果您的游戏运行时的分辨率与其设计时的分辨率不同,就需要对图形进行缩放来适应新的显示设备。我们现在不必担心这点,在第8章实现一个完整的游戏时,将介绍如何对这种情况进行处理。

3.2.3  颜色

不论绘制什么,我们都需要提供一个绘图颜色,可以通过两种方法来指定要使用的颜色:

● 使用一个System.Drawing.Color中已命名的颜色值。

● 分别指定组成色彩的红色、绿色、蓝色的值。

有很多已经命名好的颜色值,从诸如Black和Blue这样的标准颜色名称到诸如PapayaWhip和BlanchedAlmond这样的专业颜色名称。颜色名称列表实际上就是完整的X11颜色列表,该表还形成了HTML及CSS(层叠样式表)所用的预定义颜色名称列表。您可以通过位于http://en.wikipedia.org/wiki/Web_colors上的Wikipedia页面来获取关于这些颜色的更详细信息,该页面中包含了一个完整的列表,并提供了每种颜色的示例。

颜色也可以通过红、绿、蓝(加法三原色)亮度值进行表示,根据这三个值可以形成指定的颜色。这三色中的每一项都是独立的,亮度从0(无亮度)~255(最高亮度)变化。例如,指定红为255,绿与蓝为0时,结果为纯红。通过改变三原色中每个颜色的亮度,就可以创建设备所支持颜色的各种色度。


上一章目录下一章

Copyright © 读书网 www.dushu.com 2005-2020, All Rights Reserved.
鄂ICP备15019699号 鄂公网安备 42010302001612号