XNA 中的 Game 类,是所有神奇事情发生的地方。几乎游戏中所有的事情都由它来操办。

它是项目中的王者,让我们深入窥探一番:

虚方法

Game 本身从众多其它地方继续了许多能力才能完成游戏中的事情。因而它必然会重写一些方法,

以更好地完成任务。我们已经看到了一些:

Initialize ,如你所见,这个方法在Game类自身创建后,调用一次。在这里你可

以执行一些初始化游戏的动作,比如加载游戏的其它组件。

Update ,这个方法,顾名思义,就是用来更新的。你可以在这里执行游戏状态的

更新。比如,处理用户的输入,精灵的状态等等。

Draw ,这个方法,顾名思义一下,当然也是画画的意思,就是将你的精灵往屏幕

上绘制了。

还可以自行重写 BeginDraw 和 EndDraw方法 同时确保调用 base.EndDraw

除了Draw前后的方法外,还可以重写 BeginRun 和 EndRun 。

方法

Game类的大多数方法都是虚方法,没有什么太多要讲的了。

Exit 方法,会闭关游戏。

ResetElapsedTime 方法,会重置游戏流逝的时间。

---少即得。

属性

说完方法,自然就轮到属性了。

InactiveSleepTime 属性,你可以通过它控制游戏失活状态下多久会休息,

而不是持续高速运行。默认值为20毫秒。

IsActive 属性,告诉你游戏的当前状态,这跟事件 Activated 和 Deactivated

相关联。

IsMouseVisible 属性,相信你应该猜到了。

GameTime (核心)

你也许没有注意到,游戏中的许多事情都依赖于时间的变幻。如果你创建了一个

赛车游戏,你的车以60码的速度狂奔,你得知道,特定时间之后,你的车相对

刚刚,它所处的位置。XNA游戏框架通过掌控时间来为你做许多事情。

游戏有两种运行方式:固定时间节拍 和 可变时间节拍 。

前者对应的属性是 IsFixedTimeStep

如果你的游戏在 固定时间节拍 下运行,那么TargetElapsedTime 就是每一

帧画面持续的时间。

项目默认的是 固定时间节拍,每秒60帧画面,即每一帧画面持续显示 1/60 秒。

可变时间节拍,指什么呢。它指的是每帧之间停留的时间不相等。

你的游戏会先调用一次 Update ,然后调用一次 Draw ,然后不断循环这一过程。

这个循环就依据的是时间。如果你注意到,Update方法的参数正是 GameTime 。


GameTime 对象拥有三个你可以使用的属性。

第一:ElapsedGameTime 意思是自上次调用Update方法以来,时间过了多久。

第二:TotalGameTime 意思是自游戏开始运行以来,时间过了多久。

第三:IsRunningSlowly 这个属性在 固定时间节拍模式下比较重要。

下面解释一下:

前面说了,固定节拍模式,就是隔相同的时间 1/60 秒,执行一次 Update 和

Draw。但是当画面上很多东西,或者,而且电脑比较慢 ,或者在Update执行

了非常耗时的操作,那么,当1/60秒时间到了之后,游戏再次来执行的时候,会

发现,上次的任务还没有完成。

那遇到这种情况怎么办呢,它就犹豫了,一犹豫就是 Slowly模式了。

虽然慢了,但游戏还在进行,它是怎么处理的呢?

第一种情况,自上次执行Update方法以来,时间已经过了 1/60秒,但Draw

还没有执行完,等到执行完了,时间已经自上次执行过了 三倍 1/60秒了,也就

是本身应该执行的,每1/60秒 一次的Update没有执行上。也就是说可能有些

精灵的状态(可碰撞等等)已经发生了改变,还没有顾得上去更新,于是游戏为了

追赶落下的时间造成的状态的过时,它首先会将其 IsRunningSlowly 属性设置为

true ,并告诉显卡,不要画那么认真了,随便画画就行了,时间来不及了,之后

它会连续执行三次Update方法,然后再次执行Draw方法。通过这样的方式来赶上

第二种情况,如果在Update里面执行了太长时间的计算等等的操作,在下一次

Update执行之前,时间已经过了固定的节拍,如1/60 秒,那么它首先也会将

IsRunningSlowly 设置为true, 催促 计算机不要算那么认真了,快点。如果等

了较长时间,还没有完成,它会估计一下,落下的时间能不能赶上,如果能,则

等等,如果不能,就将计时器归零,重新计算 1/60 秒。


你也可以自行,将经过的时间重置,当你知道,你将要执行一个耗时的操作时,如

加载游戏进度或其它的事情。这告诉游戏,这个操作会耗费一定的时间,不要试图

追赶,从这里开始更新就好了。 在操作的最后,放置 ResetElapsedTime方法。

XNA Game Studio 4.0 Programming 随便读,随便记 “Game Class”的更多相关文章

  1. XNA Game Studio 4.0 Programming 随便读,随便记 “Rendering Text”

    在游戏中,通常要与玩家交流,比如分数,提示等.这就需要一种新的精灵, 它就叫SpritFont.下面先将其增加到项目中: 项目 -----> 添加新项-----> Sprite Font ...

  2. Android Studio 1.0.1 + Genymotion安卓模拟器打造高效安卓开发环境

    我们开发安卓大多是使用Eclipse和安卓SDK中自带的安卓模拟器.当然,Google早就推出了自己的安卓开发环境——Android studio,在不久前,Google发布了Android Stud ...

  3. Zend Studio 12.0.2正式版发布和破解方法,zend studio 12.0.1汉化,相式设置为Dreamweaver,空格缩进为4个, 代码默认不折叠的设置,Outline中使用的图形标志,代码颜色之eot设置。

    背景:zend studio 12.0.2 修复了一个12.0.1的:  Fixed problem with referenced variables marked as undefined,我都说 ...

  4. Zend Studio 8.0.1 新建远程项目无法展示远程项目列表的问题

    PHP的开发工具还是不少的,有用VI,有用eclipse.Netbean.sublime Text,当然用的比较多的还是Zend Studio,这次试用Zend Studio 8.0.1 开发几个PH ...

  5. Android Studio 1.0 (稳定版) 完全攻略

    这篇博文中主要从以下几点进行叙述: 1.Android Studio安装与使用 2.Android Studio特性 3.Android Studio优点 Android Studio 安装与使用 A ...

  6. [Unity][安卓]Unity和Android Studio 3.0 交互通讯(1)Android Studio 3.0 设置

    [安卓]Android Studio 3.0 JDK安卓环境配置(2017.10) http://blog.csdn.net/bulademian/article/details/78387052 [ ...

  7. Visual Studio 10.0设置引用HalconDotNet.dll

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/u010435562/article/details/8858638 開始做Halcon的上位机.选用 ...

  8. zend studio 13.0.0 安装破解汉化

    zend studio 13安装破解汉化步骤 官网原版下载 http://downloads.zend.com/studio-eclipse/13.0.0/ZendStudio-13.0.0-win3 ...

  9. 微软Visual Studio Code 0.8.0发布,新增多种主题

    月30日,Build 开发者大会上,正式宣布了 Visual Studio Code 项目;并将其定义为:一个运行于 Mac OS X.Windows和 Linux 之上的,针对于编写现代 Web 和 ...

随机推荐

  1. *两个关键字static和final

    static关键字:可以用于修饰属性,也可以用于修饰方法,还可以用于修饰类. static 修饰属性: 无论一个类生成了多少个对象,所有这些对象共同使用唯一一份静态的成员变量:一个对象对该静态成员变量 ...

  2. 40. Combination Sum II

    题目: Given a collection of candidate numbers (C) and a target number (T), find all unique combination ...

  3. Android中LayoutParams

    LayoutParams are used by views to tell their parents how they want to be laid out. See ViewGroup Lay ...

  4. GetKeyState和GetAsyncKeyState以及GetKeyboardState函数的用法与区别2-------C#检查键盘大小写锁定状态

    1.命名空间:using System.Runtime.InteropServices;2.导入方法[DllImport("user32.dll", EntryPoint = &q ...

  5. 用imagemagick和tesseract-ocr破解简单验证码

    用imagemagick和tesseract-ocr破解简单验证码 Tesseract-ocr据说辨识程度是世界排名第三,可谓神器啊. 准备工作: 1.安装tesseract-ocr sudo apt ...

  6. 如何解决:ERROR: the user data image is used by another emulator. aborting 的问题

    问题概述: 在启动Android模拟器时出现以下错误,导致启动失败. ERROR: the user data image is used by another emulator. aborting. ...

  7. IONIC beta.14 版本变更一览

    由网友(58758323)提供 重构 视图缓存 之前用户一旦在应用程序中执行导航动作,每个退出的视图元素和scope都会被销毁.如果相同的视图再次被访问,应用程序会重新生成元素.现在,视图可以被缓存以 ...

  8. 原创:js代码, 让dedecms支持Tag选择, 添加内容更为方便,不用手输Tag

    dedecms在编辑修改内容时,TAG标签需要手动输,中文的Tag, 中间还得用半角字符','分隔,  输入法切来切去很不方便,   于是动手改后台代码, 利用后台的tags_main.php, 让d ...

  9. Azure SQL 数据库最新版本现已提供预览版

     Tiffany Wissner  数据平台营销高级总监 我们之前在11月宣布将提供新的预览版,在该预览版中我们引入了接近完整的 SQL Server 引擎兼容性和更为高级的性能,这些都代表了下一代的 ...

  10. 对于GLM的理解,与方差分析的对比

    最近遇到一个问题,如果因变量为一个连续变量(如胰岛素水平),主要考察的变量为分组变量(如正常血糖组,前糖尿病组,糖尿病组三组),现在的目的是想看调整多种变量(包括多个连续性变量和分类变量)后,胰岛素水 ...