无效更新
让游戏进展下去的方法就是在一个已经设定的基础上渲染它。每当游戏程序探测到屏幕需要被刷新,我们就可以请求系统使屏幕的某些相应的区域失效,然后刷新这部分。
在所有适用于游戏进展由用户交互控制的游戏的技术中,这种技术是最简单的。可用于那些没有恒定定时信号和渲染(见前面游戏循环、定时回话)的游戏,这些游戏只能靠用户操作才能进展,比如猜谜游戏。
我们可以通过调用this.Invalidate()使我们的游戏窗体整个客户区失效,或者通过调用this.Invalidate( dirtyRect)使客户区的一部分失效。
仅仅调用this.Invalidate()不能保证及时描画屏幕。我们必须通过调用this.Update(),来保证在进行下一步之前刷新屏幕。异步地调用Invalidate()和Update()方法,在某些情况下有助于取得更高的性能。但是不使用正确的帧同步技术,它可能导致在屏幕上出现伪迹,并且使帧丢失。
如果我们能够每次刷新整个屏幕,那么我们只要调用this.Refresh(),就能保证Invalidate()和Update()依次调用。
当我们可以自己描画窗体的时候,我们可以在屏幕的任何部分需要被刷新的时候调用this.Refresh(),然后有选择性的刷新OnPaint()和OnPaintBackground()内的屏幕。
最优化启动时间
在游戏中,游戏开发者通常在游戏启动的时候把所有的游戏参数都初始化,以避免在游戏运行的时候产生不必要的延迟。这种方法不好之处在于延迟都被转入游戏启动时间中,尤其是如果用户在开始玩游戏之前,游戏加载时间过长的话可能让人感觉非常不愉快。
在这种情况下,最好的办法是我们能够显示一个游戏相关信息的宣传页面,然后在后台进行启动工作比如加载资源,初始化游戏参数等等。
我们可以要么使用一个单独的全屏幕窗体作为宣传页面,要么仅使用主游戏窗体本身配以基本的游戏信息。
|
public Game() // Create on-screen graphics // Display Splash screen // Destroy on-screen graphics // Proceed with your Game Screen void DoSplashScreen(Graphics gxPhys) Assembly asm = Assembly.GetExecutingAssembly(); // Draw the title screen - this is your splash screen // Now proceed with loading rest of the resources // Regulate the splash time if necessary |
重要的是不要在启动介绍页面里提供任何函数功能,最好只是把它用做一个介绍/信息页。启动时显示宣传介绍页面并不是必须的。
游戏按键
方向键
在Pocket PC中,方向键(即上下左右键)在游戏中扮演了一个非常重要的角色。我们可以把这些键的KeyDown、KeyPress和KeyUp事件分别设置为我们游戏窗体中的相关的事件方法。
通常,我们想处理这些方向键的KeyDown事件,提供游戏级功能。
|
protected override void OnKeyDown(KeyEventArgs keyg) case Keys.Right: case Keys.Up: case Keys.Down: default: // Always call the base implementation |
Pocket PC输入笔
Pocket PC上的输入笔的功能就好象台式机的鼠标。我们可以把MouseDown、MouseMove和MouseUp事件分别设置为我们游戏窗体中的相关的事件方法。
|
protected override void OnMouseDown(MouseEventArgs mouseg) } |
在Pocket PC上,.NET Compact Framework V1.0不支持鼠标右键和hardware键。
其它提示
可能的情况下,与其使用一幅位图,不如自己画图。这将减少占用内存大小,还可以提高性能。比如说,在一个太空射击游戏中,与其使用位图作为背景,不如自己使用黑色的矩形填充背景然后画上星星。
尝试把类似的位图组合成一张大的位图,以后可以根据需要使用相应坐标选取对应的单位位图。使用大的位图代替好几张小图将所有所在资源的大小。
试用除了BMP以外的图像格式(例如JPEG),这样可以充分利用其良好的图像压缩率。
尽可能多的静态初始化你的游戏程序,以免在运行期间进行大量的计算。 例如,在猜谜游戏中,你应该静态保存答案,而不要在游戏运行时再去使用代价高昂的动态算法。
结论
当我们编写用于Pocket PC这样的小型设备的游戏时,我们要牢牢的记住,显示屏幕非常小,并且硬件比台式机功能要差很多。
所以我们要最大限度的最优化用于这些小型设备上的游戏。当设计游戏时,要认真的考虑目标硬件、操作系统和.NET Compact Framework的性能。
一个游戏还要以它的描画程序取胜。高效率的描画技术决定了游戏的反应灵敏度,特别是象Pocket PC这样的小型设备。所以要使用我们前面提到的描画调节技术(比如变动区域计算技术)来节省每帧描画所用时间。
帧速率是另一个要牢牢记住的重要因素,要根据目标设备的性能灵活选择。
相关专题
- 游戏开发 (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次浏览)



