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

 

目录
相关文章
|
4月前
|
存储 算法 C++
【Qt应用开发】复刻经典:基于Qt实现Windows风格计算器(加减乘除、删除、归零功能全解析)
在Qt中,"栈"的概念主要体现在两个层面:一是程序设计中的数据结构——栈(Stack),二是用户界面管理中的QStackedWidget控件。下面我将分别简要介绍这两个方面:
135 4
|
图形学
带你读《Unity游戏开发(原书第3版)》之二:游戏对象
本书主要介绍Unity2018的使用和游戏开发流程中涉及的各种知识。每一章的结构特别清晰,先综述该章要介绍的内容,然后一步步深入讲解,中间穿插着很多动手做的实践操作,可以让读者加深对某个概念、方法的理解,每章的最后还有一个小测验和一个稍微大一点的实践练习,用于巩固该章的学习内容。
|
图形学
Unity游戏开发常用的一些函数用法
Unity游戏开发常用函数 本文提供全流程,中文翻译。 Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 —— 高分辨率用户请根据需求调整网页缩放比例) Chinar —— 心分...
1767 0
|
图形学
Unity 3D游戏-塔防类游戏源码:重要方法和功能的实现
Unity-塔防游戏源码 本文提供全流程,中文翻译。Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 —— 高分辨率用户请根据需求调整网页缩放比例) ...
1910 0
|
前端开发 图形学
Unity 3D游戏-贪吃蛇类游戏源码:重要方法和功能的实现
贪吃蛇类游戏源码 本文提供全流程,中文翻译。Chinar坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 —— 高分辨率用户请根据需求调整网页缩放比例) ...
2190 0