频道直达 - 专题 - 新闻 - 技巧 - 组网 - 开发 - 安全 - web编程 - 图像 - 操作系统 - 数据库 - 教育 - 旅游 - 健康 - 时尚 - 驱动 - 软件 - 游戏 - 多媒体 - ERP - 讨论组

.Net Framework智能版开发移动游戏

来源:yesky 作者:WAYNE 郭磊 出处:巧巧读书 2005-12-30 进入讨论组
上一页 1 2 3 4 5 6 7 

  无效更新

  让游戏进展下去的方法就是在一个已经设定的基础上渲染它。每当游戏程序探测到屏幕需要被刷新,我们就可以请求系统使屏幕的某些相应的区域失效,然后刷新这部分。

  在所有适用于游戏进展由用户交互控制的游戏的技术中,这种技术是最简单的。可用于那些没有恒定定时信号和渲染(见前面游戏循环、定时回话)的游戏,这些游戏只能靠用户操作才能进展,比如猜谜游戏。
我们可以通过调用this.Invalidate()使我们的游戏窗体整个客户区失效,或者通过调用this.Invalidate( dirtyRect)使客户区的一部分失效。

  仅仅调用this.Invalidate()不能保证及时描画屏幕。我们必须通过调用this.Update(),来保证在进行下一步之前刷新屏幕。异步地调用Invalidate()和Update()方法,在某些情况下有助于取得更高的性能。但是不使用正确的帧同步技术,它可能导致在屏幕上出现伪迹,并且使帧丢失。

  如果我们能够每次刷新整个屏幕,那么我们只要调用this.Refresh(),就能保证Invalidate()和Update()依次调用。

  当我们可以自己描画窗体的时候,我们可以在屏幕的任何部分需要被刷新的时候调用this.Refresh(),然后有选择性的刷新OnPaint()和OnPaintBackground()内的屏幕。

  最优化启动时间

  在游戏中,游戏开发者通常在游戏启动的时候把所有的游戏参数都初始化,以避免在游戏运行的时候产生不必要的延迟。这种方法不好之处在于延迟都被转入游戏启动时间中,尤其是如果用户在开始玩游戏之前,游戏加载时间过长的话可能让人感觉非常不愉快。

  在这种情况下,最好的办法是我们能够显示一个游戏相关信息的宣传页面,然后在后台进行启动工作比如加载资源,初始化游戏参数等等。

  我们可以要么使用一个单独的全屏幕窗体作为宣传页面,要么仅使用主游戏窗体本身配以基本的游戏信息。

public Game()
{
// Set visibility first
this.Visible = true;

// Create on-screen graphics
Graphics gxOn = this.CreateGraphics();

// Display Splash screen
DoSplashScreen(gxOn);

// Destroy on-screen graphics
gxOn.Dispose();

// Proceed with your Game Screen
}

void DoSplashScreen(Graphics gxPhys)
{
// Load minimal resources such as title bitmap

Assembly asm = Assembly.GetExecutingAssembly();
Bitmap bmpTitle =
new Bitmap(asm.GetManifestResourceStream("title"));

// Draw the title screen - this is your splash screen
gxPhys.DrawImage(bmpTitle, 0, 0);

// Now proceed with loading rest of the resources
// and initializing the game

// Regulate the splash time if necessary
}

  重要的是不要在启动介绍页面里提供任何函数功能,最好只是把它用做一个介绍/信息页。启动时显示宣传介绍页面并不是必须的。

  游戏按键

  方向键

  在Pocket PC中,方向键(即上下左右键)在游戏中扮演了一个非常重要的角色。我们可以把这些键的KeyDown、KeyPress和KeyUp事件分别设置为我们游戏窗体中的相关的事件方法。

  通常,我们想处理这些方向键的KeyDown事件,提供游戏级功能。

protected override void OnKeyDown(KeyEventArgs keyg)
{
switch(keyg.KeyData)
{
case Keys.Left:
// Provide game functionality for Left key
break;

case Keys.Right:
// Provide game functionality for Right key
break;

case Keys.Up:
// Provide game functionality for Up key
break;

case Keys.Down:
// Provide game functionality for Down key
break;

default:
// We don't care
break;
}

// Always call the base implementation
// so that the registered delegates for this event are raised.
base.OnKeyDown(keyg);
}

  Pocket PC输入笔

  Pocket PC上的输入笔的功能就好象台式机的鼠标。我们可以把MouseDown、MouseMove和MouseUp事件分别设置为我们游戏窗体中的相关的事件方法。

protected override void OnMouseDown(MouseEventArgs mouseg)
{
Point ptHit = new Point(mouseg.X, mouseg.Y));

}

  在Pocket PC上,.NET Compact Framework V1.0不支持鼠标右键和hardware键。

  其它提示

  可能的情况下,与其使用一幅位图,不如自己画图。这将减少占用内存大小,还可以提高性能。比如说,在一个太空射击游戏中,与其使用位图作为背景,不如自己使用黑色的矩形填充背景然后画上星星。
尝试把类似的位图组合成一张大的位图,以后可以根据需要使用相应坐标选取对应的单位位图。使用大的位图代替好几张小图将所有所在资源的大小。

  试用除了BMP以外的图像格式(例如JPEG),这样可以充分利用其良好的图像压缩率。

  尽可能多的静态初始化你的游戏程序,以免在运行期间进行大量的计算。 例如,在猜谜游戏中,你应该静态保存答案,而不要在游戏运行时再去使用代价高昂的动态算法。

  结论

  当我们编写用于Pocket PC这样的小型设备的游戏时,我们要牢牢的记住,显示屏幕非常小,并且硬件比台式机功能要差很多。

  所以我们要最大限度的最优化用于这些小型设备上的游戏。当设计游戏时,要认真的考虑目标硬件、操作系统和.NET Compact Framework的性能。

  一个游戏还要以它的描画程序取胜。高效率的描画技术决定了游戏的反应灵敏度,特别是象Pocket PC这样的小型设备。所以要使用我们前面提到的描画调节技术(比如变动区域计算技术)来节省每帧描画所用时间。

  帧速率是另一个要牢牢记住的重要因素,要根据目标设备的性能灵活选择。

来自:http://www.qqread.com/dotnet/u292184000.html 更多文章 更多内容请看游戏开发网络游戏攻略.NET Framework新手入门专题,或进入讨论组讨论。
上一页 1 2 3 4 5 6 7 
收藏此文】【 】【打印】【关闭
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
巧巧读书宗旨
相关专题
讨论组问题推荐
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
Photoshop教 程照片处理 照片制作 PS快捷键 抠图
计 算 机 故 障XP系统修复
艺 术 与 设 计设计 流媒体 设计欣赏 边框
计 算 机 安 全ARP
站内频道文章精选
巧巧电脑频道编辑信箱  告诉我们您想看的专题或文章