XNA基础(01) —— 游戏循环

简介: 当安装好了VS 2008和XNA GameStudio 3.0后,我们就可以开始学习XNA了。      首先,在VS 2008中新建一个XNA GameStudio 3.0项目(选择Windows Game类型),会生成一个最简单的、可运行的游戏模板。

     当安装好了VS 2008和XNA GameStudio 3.0后,我们就可以开始学习XNA了。

     首先,在VS 2008中新建一个XNA GameStudio 3.0项目(选择Windows Game类型),会生成一个最简单的、可运行的游戏模板。

     接下来我们将注意力转移到我们要剖析的重点 —— 从Microsoft.Xna.Framework.Game继承的Game1类,其代码如下:          

  public   class  Game1 : Microsoft.Xna.Framework.Game
    {
        GraphicsDeviceManager graphics;
        SpriteBatch spriteBatch;

        
public  Game1()
        {
            graphics 
=   new  GraphicsDeviceManager( this );
            Content.RootDirectory 
=   " Content " ;
        }
       
        
protected   override   void  Initialize()
        {            
            
base .Initialize();
        }
       
        
protected   override   void  LoadContent()
        {            
            spriteBatch 
=   new  SpriteBatch(GraphicsDevice);           
        }
        
        
protected   override   void  UnloadContent()
        {           
        }
      
        
protected   override   void  Update(GameTime gameTime)
        {           
            
if  (GamePad.GetState(PlayerIndex.One).Buttons.Back  ==  ButtonState.Pressed)
                
this .Exit();

            
base .Update(gameTime);
        }
      
        
protected   override   void  Draw(GameTime gameTime)
        {
            GraphicsDevice.Clear(Color.CornflowerBlue);

            
base .Draw(gameTime);
        }
    }

 

        我们简单解释一下该类中所用到的重要类型。

GraphicsDeviceManager 图形设备管理器,用于访问图形设备的通道。

GraphicsDevice 图形设备。

Sprite 精灵,绘制在屏幕上的的2D3D图像,比如游戏场景中的一个怪兽就是一个Sprite

SpriteBatch 它使用同样的方法来渲染一组Sprite对象。

 

        而Microsoft.Xna.Framework.Game 这个基类就像是一个基础框架,它把整个游戏流程串联了起来,即,整个游戏会按如下流程运转。

             

        该图中的五个方法正好对应着Game1类中的五个方法,它们的作用解释如下。

     Initialize方法用于初始化与游戏相关的对象,比如初始化图形设备、游戏环境设置等。

     LoadContent方法在Initialize方法之后调用,它用于加载游戏所需要的图形或其它素材,比如模型、图片、声音等。

     UpdateDraw方法构成了游戏循环

     Update方法用于改变和控制游戏的状态,主导着游戏逻辑的进行。

     Draw方法用于在屏幕上绘制我们的场景、Sprite。要注意的是,我们应该尽可能少的在Draw方法中处理游戏逻辑——它们应该在Update方法中被处理。Draw方法仅仅负责绘制。

     UpdateDraw方法都接受一个GameTime类型的参数,GameTime有什么作用了?这个参数可以帮助我们依据实际的游戏时间而不是处理器的速度来决定动画或其它事件的发生时刻。

      在这个最简单的例子中,游戏将以默认的60fpsFrame/Second)运行。

     UnloadContent方法在游戏结束时被调用,该方法用于卸载在LoadContent方法中所加载的素材和那些需你要进行特别处理的善后事宜。

 

     状态轮询与事件监听

     写过Windows应用程序的朋友都知道,当用鼠标点击Form上的一个Button时,会触发一个Click事件,而我们的应用程序通过监听到事件的发生进而来处理事件。

     而在游戏开发中,我们需要将我们的这种“事件”思维切换到“轮询”思维。也就是说,游戏中,用户的鼠标、键盘操作并不会触发相关的事件。如果是这样的话,那我们该如何知道用户是否按下了鼠标了?答案是我们需要在游戏循环中(确切的说是在Update方法中)不断地检测输入设备(比如鼠标)的状态来进行判断。

       这就是轮询机制与事件机制的区别,也是游戏开发和普通windows应用开发需要转换思路的地方。

       归根到底,windows事件机制也是对轮询机制(即Windows消息循环)的一个封装

       

       今天的介绍就到这里,下一节我们将介绍与渲染相关的基础知识。   

       最后,附上XNA GameStudio 3.0的下载地址:http://creators.xna.com/en-us/xnags_islive

 

目录
相关文章
|
机器学习/深度学习 算法 数据建模
探索XGBoost:时间序列数据建模
探索XGBoost:时间序列数据建模
434 2
|
算法
AntV G6布局机制
AntV G6布局机制
632 0
|
9月前
|
人工智能 搜索推荐 vr&ar
《解锁无限可能:在鸿蒙开源系统中打造AI驱动的元宇宙应用》
鸿蒙系统的开源特性与人工智能技术的融合为开发者开启了创新大门,特别是在构建AI驱动的元宇宙应用方面展现出巨大潜力。通过深入理解鸿蒙的开源机制,开发者可以自由获取源代码,定制优化系统,并利用丰富的开源工具如DevEcoStudio快速搭建AI开发环境。鸿蒙的分布式架构支持多设备无缝协同,提升用户体验。同时,开源数据有助于提高AI训练效果,而积极参与社区贡献则加速了生态发展,共同推动元宇宙应用的创新与繁荣。
214 13
|
存储 SQL Apache
阿里云数据库内核 Apache Doris 基于 Workload Group 的负载隔离能力解读
阿里云数据库内核 Apache Doris 基于 Workload Group 的负载隔离能力解读
66876 0
阿里云数据库内核 Apache Doris 基于 Workload Group 的负载隔离能力解读
|
小程序 安全
Fiddler抓取小程序后端请求导入AppScan扫描快捷方法
【8月更文挑战第26天】这是一种利用 Fiddler 捕获小程序后端请求并导入 AppScan 进行安全扫描的方法。首先安装配置 Fiddler 并设置手机代理,通过 Fiddler 捕获请求;接着导出这些请求为 .saz 文件,并在 AppScan 中导入此文件,配置扫描参数后启动扫描以检测安全漏洞。操作时需确保有合法授权并遵循相关法规。尽管不同版本软件操作细节可能有所不同,但整体流程类似。
533 1
|
机器学习/深度学习 人工智能 算法
深入理解与实践:基于AI的软件测试自动化
【5月更文挑战第1天】随着人工智能的不断发展,其在软件测试中的应用也日益广泛。本文将探讨如何利用AI进行软件测试自动化,包括其理论基础、实现方式以及在实际中的应用。我们将通过实例分析,展示AI在提高软件测试效率和质量方面的巨大潜力。
|
存储 数据采集 人工智能
深度探索Aidlux智慧教育中的图像版面分析应用实践
本文详细描述了智慧教育领域的版面分析应用的人工智能训练营项目。项目的目标是构建一个高效的文档图像处理系统,实现文档对象识别和分类,并探索了组卷、以题搜题、文档电子化存储、结构化解析等功能。通过训练模型、实践应用和模型部署验证,分享了在该项目中所获得的见解和心得。
246 0
|
运维 Java 云计算
深入浅出:使用Docker容器化改进Java应用部署
在当前快速演变的软件开发领域,Docker作为一种开源的容器化技术,已经成为优化应用部署、实现快速交付和高效率运维的关键工具。本文将探讨如何利用Docker容器化技术来改进Java应用的部署流程。我们不仅会介绍Docker的基础知识,还会通过一个实际的Java应用示例,详细展示从创建Dockerfile到构建镜像,再到运行容器的整个过程。此外,文章还将探讨容器化带来的好处,如环境一致性、便捷的版本控制和简化的部署流程等,力求为读者提供一个清晰、易懂的指南,帮助他们在自己的项目中实现Docker容器化,从而提升开发和部署效率。
303 1
|
SQL 分布式计算 测试技术
从 Clickhouse 到阿里云数据库 SelectDB 版内核 Apache Doris:有赞业务场景下性能测试与迁移验证
从 Clickhouse 到阿里云数据库 SelectDB 版内核 Apache Doris 迁移实践:有赞查询提速近 10 倍,OLAP 分析更实时高效!
2235 2
从 Clickhouse 到阿里云数据库 SelectDB 版内核 Apache Doris:有赞业务场景下性能测试与迁移验证
|
存储 应用服务中间件 调度
国产操作系统---麒麟安装FastDFS
国产操作系统---麒麟安装FastDFS
414 0