XNA框架及精灵动画
XNA是微软开发的一款用于window,xbox,windows phone等设备上的游戏开发框架,他的特点是方便快捷的开发游戏,提供给我们很多的游戏开发套件,摒弃了传统的游戏引擎多文件多目录的繁琐,使我们用起来容易上手,在wp8 SDK发布之后,目前微软已经表示wp8不再支持用XNA开发游戏,但是会完全兼容XNA游戏,所以XNA游戏还是可以在这些平台上运行(这点感觉微软有点坑爹)!
学习要求:XNA游戏开发主要是采用C#语言,但是要求不是很高,只需要我们掌握基础的语法 加上一定的利用API开发的经验就可以开始学习了!本博文系列的教材是《XNA4.0入门指南》,算是总结性质的吧,结合教材看效果更佳!
我的系统环境是windows 8,开发IDE用的是windows phone7.1 SDK,该开发包里面已经集成了XNA4.0的开发套件,也集成了简易的开发环境VS2010 express for windows phone!所以没有必要再VS2010的基础上安装7.1SDK,对于开发环境的搭建网上已有很多教程,在这里我就不累述了.这里附上windows phone 7.1SDK的官方下载地址 windows phone 7.1 SDK 接下来开始我们的XNA游戏开发之旅:
1:第一个XNA程序
工程创建:新建项目—XNA game studio 4.0—windows游戏 完成之后工作区如图所示
在这几个目录中,我们暂时只需要关注两个目录,一个是Programs.cs和Game1.cs,前面一个是主函数文件,他是游戏程序的入口点,说实话我们暂时不需要用他,后者才说我们的重点,点开目录,看到的代码如下:
using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;
namespace WindowsGame5
{
/// <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);
}
/// &