电玩巴士 > PSV > 软件教程 > 正文

PS Suite SDK官方开发帮助文档完整中文翻译

发布时间:2012/5/29 16:33:44 来源:电玩巴士 作者:天楼神威

论坛PSS专区

  编程向导之四:面向对象(上)

  该文档讲述的是面向对象的技术。

  创建游戏框架类

  在“程序框架”中,我们已经讲解过通用的PS Suite程序框架。用PS Suite创建程序时,框架几乎是相同的。试着创建一个程序框架作为基类,继承并使其具有价值。打开Sample/Tutorial/Sample04_01,查看TutoLib程序中的GameFramework.cs文件。
  Sample/Tutorial/TutoLib/GameFramework.cs

  定义GameFramework类,之前代码Main()中的Update()和Render(),目前将在Run()中处理。实例化GameFramework类,调用Run()函数,然后进入循环。

  time[0] = (int)stopwatch.ElapsedTicks和
  time[1] = (int)stopwatch.ElapsedTicks

  这两行是用来计算处理时间的,无论是什么样的程序都需要计算处理时间,所以运用十分广泛,之后会另作说明。

  继承GameFramework类,然后实现GameFrameworkSample类。以下是继承的部分。
  Sample/Tutorial/Sample04_01/GameFrameworkSample.cs

  玩家的操作等,在这个程序中都要通过覆盖(override重写)独立部分来实现。

  base.Initialize()、base.Update()、base.Render()在基类GameFramework中调用已定义的处理。

  需要注意的是,
  ·base.Initialize()在已继承的Initialize()函数最前端
  ·base.Update()在已继承的Update()函数最前端
  ·base.Render()在已继承的Render()函数最末端
  被调用。

  如果忘记实现base.Update()和base.Render(),基类中就不会执行,执行结果就有可能不正确,请注意。

  生成的GameFrameworkSample类用法如下:
  Sample/Tutorial/Sample04_01/AppMain.cs

  生成GameFrameworkSample的实例,并调用Run(),和之前一样运行程序。试着运行程序,玩家将和以前一样移动。

  这次左上角会有一些数字,这是在GameFramework中实现的每帧计算处理时间,接下来将进一步说明。

  计算处理时间

  在游戏应用中,掌握“什么样的场合中将耗费多久的处理时间”是相当重要的。虽然在命令行应用当中处理时间耗费10-50毫秒没什么问题,但在游戏中如果不能及时切换画面就会产生处理延迟,看上去就会有明显的问题。

  执行Sample04_01时,画面左上将显示Update和Render的数字字符串,这是在画面切换时,各种处理所占这16毫秒中的百分之多少。该数字受运行程序所用设备性能的影响,在我的电脑上大概是Update= 0.50%,Render= 25.00%左右。Update几乎没占多少处理时间,那是因为Update()中只有简单的条件判断和加减法运算,处理非常简单。而Render占了25%,处理时间相当长。根据设备的不同,渲染机制也会有所不同,所以Render的处理时间只能作为一个参考值。如果Update+Render的处理时间超过100%,就会来不及切换画面,从而产生处理延迟。计算处理时间的位置是在GameFramework.cs中,让我们来看看这一部分代码。
  Sample/Tutorial/TutoLib/GameFramework.cs

  Stopwatch类是用来计算经过时间的类,从stopwatch.Start()函数开始计算。

  stopwatch.ElapsedTicks就是经过时间。如果想要知道每帧开始的时间,就要在循环最前端保存time[0] = (int)stopwatch.ElapsedTicks这个时间。接着在Update()结束的地方,保存time[1] = (int)stopwatch.ElapsedTicks;这个经过时间,然后用time[1]-time[0]得到的差值就是经过时间。接下来也一样,在Render()结束后保存经过时间time[2] = (int)stopwatch.ElapsedTicks;preTime=(int[])time.Clone();是把计算所得的时间复制到数组中。

  然后就是计算各个经过时间,在DebugString中显示。DebugString是在屏幕上显示ASCII字符的类。就像Console.Write()一样,函数将指定一个字符串参数。

  由于无法显示当前计测中的帧,preTime中保存的是前一帧的计测时间。如果想知道消耗处理时间的详细位置,就要从增加time[]数组的大小,以及增加调用time= (int)stopwatch.ElapsedTicks;的次数入手。想要切换调试字体的ON/OFF时,只要按住L键再按R键,而键盘则是按住Q键再按E键即可。

上一页  [1] [2] [3] [4] [5] [6] [7] [8]  ... 下一页  >> 

提示:支持键盘“← →”键翻页 阅读全文

相关推荐

评论