XNA入门介绍

        打开初始化的项目后,可以明显看到一大堆文件,游戏的真正核心在于Game1.cs文件。这个文件里面有好几个初始定义函数,下面开始介绍。

        文件的主要内容为:

namespace Game1
{
    /// <summary>
    /// 这是游戏的主类型
    /// </summary>
    public class Game1 : Microsoft.Xna.Framework.Game
    {
        GraphicsDeviceManager graphics;
        SpriteBatch spriteBatch;

        public Game1()
        {
            graphics = new GraphicsDeviceManager(this);
            Content.RootDirectory = "Content";
        }

        /// <summary>
        /// 允许游戏在开始运行之前执行其所需的任何初始化。
        /// 游戏能够在此时查询任何所需服务并加载任何非图形
        /// 相关的内容。调用 base.Initialize 将枚举所有组件
        /// 并对其进行初始化。 
        /// </summary>
        protected override void Initialize()
        {
            // TODO: 在此处添加初始化逻辑

            base.Initialize();
        }

        /// <summary>
        /// 对于每个游戏会调用一次 LoadContent,
        /// 用于加载所有内容。
        /// </summary>
        protected override void LoadContent()
        {
            // 创建新的 SpriteBatch,可将其用于绘制纹理。
            spriteBatch = new SpriteBatch(GraphicsDevice);

            // TODO: 在此处使用 this.Content 加载游戏内容
        }

        /// <summary>
        /// 对于每个游戏会调用一次 UnloadContent,
        /// 用于取消加载所有内容。
        /// </summary>
        protected override void UnloadContent()
        {
            // TODO: 在此处取消加载任何非 ContentManager 内容
        }

        /// <summary>
        /// 允许游戏运行逻辑,例如更新全部内容、
        /// 检查冲突、收集输入信息以及播放音频。
        /// </summary>
        /// <param name="gameTime">提供计时值的快照。</param>
        protected override void Update(GameTime gameTime)
        {
            // 允许游戏退出
            if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
                this.Exit();

            // TODO: 在此处添加更新逻辑

            base.Update(gameTime);
        }

        /// <summary>
        /// 当游戏该进行自我绘制时调用此项。
        /// </summary>
        /// <param name="gameTime">提供计时值的快照。</param>
        protected override void Draw(GameTime gameTime)
        {
            GraphicsDevice.Clear(Color.CornflowerBlue);

            // TODO: 在此处添加绘图代码

            base.Draw(gameTime);
        }
    }
}

        可以留意到代码中有好几个函数以及一些很有用的注释,而XNA中一个游戏的生命周期如下:

        Initialize方法被用来初始化变量和其它与Game1对象相关的对象。

        LoadContent方法在Initialize方法之后被调用,另外在任何需要重新载入游戏图形内容的时候也会被调用。在LoadContent中,将会载入游戏所需要的一切图形及其他内容,包括图像、模型和音效等。

        Update和Draw方法在LoadContent方法之后被循环反复调用,进入游戏循环阶段。游戏运行需要的一切逻辑变化和实现都应该放在Update方法中实现,而Draw方法应该尽量做最少的事情,即仅包括图形的绘制。

        UnloadContent用来卸载所有在LoadContent方法里加载且需使用特殊手段进行卸载的内容。Update被调用之后有两种结果,一个是在游戏中继续循环,然后调用Draw方法;而另一个是游戏结束,退出游戏循环,并调用UnloadContent方法。

        游戏开发和程序开发之间存在的一个关键差异是轮询和事件注册。一般程序是采取事件驱动的方式来处理逻辑,即在用户操作(例如点击某个按钮)致使系统产生一个能够被程序捕获的事件之前,程序不会做任何事。而游戏则是由事件轮询驱动,即游戏并不是在等待并监听是否有事件被激活,而是会主动询问某些事件是否发生,同时游戏会一直运行。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值