Chinaunix首页 | 论坛 | 博客
  • 博客访问: 588395
  • 博文数量: 208
  • 博客积分: 3286
  • 博客等级: 中校
  • 技术积分: 1780
  • 用 户 组: 普通用户
  • 注册时间: 2007-09-24 20:38
文章分类

全部博文(208)

文章存档

2012年(7)

2011年(28)

2010年(21)

2009年(76)

2008年(65)

2007年(11)

我的朋友

分类: C/C++

2008-02-25 15:39:09

2.4在Xbox 360上试试     好了,游戏已经完成了,而且在Windows平台上也做了很多测试。就像我在第一章中解释的那样,要在Xbox 360上配置并运行XNA Framework需要几个关键步骤。如果Xbox 360上的XNA Game Launcher已经启动,您可以试着编译您的XNA Pong游戏并把它部署到控制台。

     对于Xbox 360有特别重要的几点要谨记:
  • 如非必要不要使用任何外部DLL——虽然使用XNA Game DLL是可以的,但大多数Windows平台上的DLL都会调用Windows的系统DLL文件,而这些系统DLL文件在Xbox 360平台是无法使用的,而且更糟的是,出于安全考虑在Xbox 360平台上是不支持使用指针方式(P-Invoke)调用非托管DLL文件的。另外,也不要使用非安全代码或者试图调用外部代码、访问设备,或者使用不支持的特性,这样做纯粹是浪费时间,您做好按照规则行事。
  • Don’t wait with the testing——开发项目的时候,如果您把输出设置更改到Xbox 360上,您要测试您的代码是否能正常编译,因为您习惯使用的很多方法在Xbox 360上是不存在的。比如,在Xbox 360上动态库System.dll中是没有TryParse方法的,还有一些XNA方法和类(例如MouseState类)根本就不受支持,也不存在。
  • 不要直接加载内容——在Windows平台上,借助Texture2D或CompiledEffect构造器您可以直接加载textures和shaders。而在Xbox 360上这些方法是不存在的,您只能使用内容管道来加载内容。如果您使用动态加载或重新加载textures和shaders代码的话,它们也只能在Windows平台上工作,所以为Xbox 360构建程序的话要使用标记 #if !XBOX 360…#endif 把这些代码包含起来。
  • 保存游戏并加载其他内容——要保存游戏您可以使用Content命名空间以及其他很多辅助类。借助StorageContaine.TitleLocation(这在Windows平台也可以使用,而且就使用输出文件夹)加载内容您要始终确保使用了正确的路径,从Xbox 360其他位置加载会导致拒绝访问(Access Denied)异常。
  • 测试分辨率——Xbox 360支持很多个人电脑上的分辨率方案,所以您至少要测试2到3种来保证游戏可以正常运行。
  • 允许使用Gamepad操作一切——关于这一点,我所见过的大多数XNA游戏都犯了一个错误,它们要么只支持键盘输入或者只支持Gamepad输入,这也就意味着它们要么只能运行在Windows上,要么只能运行在Xbox 360上。支持足够多的设备对您的游戏来说是非常有意义的。
  • 在Xbox 360上进行调试和单元测试——在Xbox 360控制台上进行调试和单元测试与在Windows平台上的没有什么区别,可以使用相同的规则。或许跟踪错误和记录错误信息有点难,但使用XNA还是可以进行单步调试和测试单元测试。要好好利用这一点。顺便说一句:在Windows平台上,调试的时候如果修改了代码仍然可以继续执行,但是对于Xbox 360游戏却不能。这一点很不爽,不过一般您都是在Windows平台上完成主要的开发。 
     这个XNA Pong游戏在编码时始终考虑到了Xbox 360,您使用的所有方法和特性在Xbox 360上都受支持。所以在Xbox 360上测试这个游戏并不是什么大问题,您可以直接部署它,然后运行它,如图2-11所示:

图2-11

2.5挑战:改进您的Pong游戏

     现在轮到您来对游戏进行一些改进了,您可以换一换图片或声音,或者调整一下游戏的玩法。如果您有Gamepad,您还可以添加Rumble支持,而且如果您读本书的话,您的确应该有一个Gamepad控制器,即使您没有Xbox 360。很多XNA游戏都需要Xbox 360控制器,而且有些游戏使用Xbox 360控制器会比使用键盘更好玩。

     下面是为Gamepad添加Rumble支持的代码:

GamePad.SetVibration(PlayerIndex.One, leftRumble, rightRumble);

当球撞倒球拍时,使用上述代码让控制器震动一会(leftRumble和rightRumble使用相同的值,这样整个控制器就会震动)。当玩家失去一条命时也可以震动一下,这次时间可以长一些,并震动得强烈一些。

     您可以查看本章的示例项目,看看这里的挑战方案。您的挑战方案不必和这相同,不过看一看还是有帮助的,或许可以学习一下使用一种更简单的方式来解决某个特定的问题。

     好好享受您的XNA游戏吧!
阅读(820) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~