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. Sina App Engine(SAE)入门教程(5)- SaeSegment(中文分词服务)使用

    分词能干什么? 提取一篇文章的关键字 检测特定的段落中有没有违禁词 智能机器人 …..尽你所想 开启SAE 分词服务 首先你需要在sae的管理面板开始分词服务后才能使用sae的服务.具体的开启操作: ...

  2. Web 技术人员需知的Web 缓存知识

    最近的译文距今已有4年之久,原文有一定的更新.今天踩着前辈们的肩膀,再次把这篇文章翻译整理下.一来让自己对web缓存的理解更深刻些,二来让大家注意力稍稍转移下,不要整天HTML5, 面试题啊叨啊叨的~ ...

  3. Photoshop:笔刷制作和安装

    笔刷制作 1.新建一个文档,大小为要制作的笔刷大小,把画笔图像放里面 2.选择:菜单->编辑->定义画笔预设,这时在画笔面板中会出现刚定义的画笔 3.存储画笔,可以把当前的笔刷保存为一个. ...

  4. Bean不同配置方式比较

      基于XML配置 基于注解配置 基于Java类配置 Bean定义 在XML文件中通过<bean>元素定义Bean,如:<bean class="com.bbt.UserD ...

  5. Linux文件目录结构详解

    整理自<鸟哥的私房菜> 对于每一个Linux学习者来说,了解Linux文件系统的目录结构,是学好Linux的至关重要的一步.,深入了解linux文件目录结构的标准和每个目录的详细功能,对于 ...

  6. selenium--大家庭介绍

    安装好配置环境后,开始我的selenium之旅.简单的了解一下色,selenium大家庭的组成. Selenium是ThoughtWorks专门为 Web 应用而开发的功能测试工具.Selenium使 ...

  7. inand和emmc区别

    简单来说:inand式sandisk公司做的一款符合emmc标准的一个emmc存储器! ----

  8. 自定义View(3)关于canas.drawText

    本文以Canvas类的下面这个函数为基础,它用来在画布上绘制文本. public void drawText(String text, float x, float y, Paint paint) 效 ...

  9. 分解成3NF的保持函数依赖的分解算法:

    转换成3NF的保持函数依赖的分解算法: ρ={R1<U1,F1>,R2<U2,F2>,...,Rk<Uk,Fk>}是关系模式R<U,F>的一个分解,U= ...

  10. Delphi使用JSON解析调用淘宝IP地址库REST API 示例

    淘宝IP地址库:http://ip.taobao.com,里面有REST API 说明. Delphi XE 调试通过,关键代码如下: var IdHTTP: TIdHTTP; RequestURL: ...