之前一直在做Android 的软件应用,包括现在学习Wp7 开发也一直未接触过游戏方面的开发。这几天对XNA开发粗略的看了一下,也找了相关的文档,觉得对于学习XNA方式开发WP7游戏应用应该是一件很酷的事。也是对自己本身职业技能的提高吧。
学习XNA开发游戏需要的工具
- Visual Studio 2010 前提是安装了Developer Tools 套件或Express for Windows Phone
- Microsoft Cross-Platform Audio Creation Tool 3 (XACT3):XACT 是一个由 Microsoft 开发的跨平台的音效建立工具,可以协助您建立游戏程序需要使用的音效资源。
- XNA Framework Remote Performance Monitor:XNA Framework Remote Performance Monitor 是一个可以在游戏运行时间分析游戏效能的工具,协助程序设计师分析游戏程序的执行效能。
XNA 游戏程序架构的属性和方法
使用IDE创建一个Windows Phone Game (4.0)的解决方案。这里主要学习的是Game1.cs 这个文件,该文件默认为游戏的程序入口,而且该类默认继承自Microsoft.Xna.Framework.Game,该模板会预设为我们重写几个游戏运行需要的方法,方法列表如下:
- public Game1()构造函数
- protected override void Initialize() 负责初始化动作
- protected override void LoadContent() 负责加载资源
- protected override void UnloadContent() 负责释放资源动作
- protected override void Update(GameTime gameTime)负责更新游戏的状态,但不负责更新游戏的画面
- protected override void Draw(GameTime gameTime)跟update 相反。Draw 负责更新游戏的画面
其中Game1 还有两个比较常用的方法没有默认为我们重写,这两个方法也是比较常用,分别为:
- protected override bool BeginDraw() 开始绘图的动作
- protected override void EndDraw() 绘图动作结束
Game1比较常用的属性,可见下表:
属性名称 |
说明 |
Components |
管理所有 GameComponent 的集合 |
Content |
取得 ContentManager 对象的属性 |
GraphicsDevice |
取得图型装置对象的属性 |
IsActive |
判断游戏程序的窗口目前是否在作用中 |
IsFixedTimeStep |
控制游戏程序要使用固定更新模式或是可变更新模式 |
TargetElapsedTime |
当 IsFixedTimeStep 属性的内容值为 true 时,控制 Update 方法被呼叫的频率的属性 |
继续查看Game1 文件生成的代码,最上方默认声明了两个变量:
//以XNA为基础的游戏程序必须在初始化的时候声明GraphicsDeviceManager的对象,并设定游戏界面的高度与宽度
GraphicsDeviceManagergraphics;
SpriteBatchspriteBatch;//SpriteBatch主要显示2D图像,包括游戏背景、游戏人物、游戏的状态和菜单
在Gamer1 的构造函数中可以通过如下代码创建一个GraphicsDeviceManager对象
publicGame1()
{
graphics=newGraphicsDeviceManager(this);
Content.RootDirectory="Content";
graphics.PreferredBackBufferHeight=480;//创建一个画面高度为480的屏幕
graphics.PreferredBackBufferWidth=800;//创建一个画面宽度为800的屏幕
//负责控制游戏程序更新状态及显示内容的频率
TargetElapsedTime=TimeSpan.FromTicks(333333);//设定游戏每秒更新30次,这里并不一定适合PC机或XBOX
}
GraphicsDeviceManager对象常用的属性可见下表:
属性名称 |
说明 |
IsFullScreen |
控制游戏程序的窗口是否要以全屏幕的方式显示 |
PreferredBackBufferFormat |
屏幕缓冲区的格式 |
PreferredBackBufferHeight |
屏幕缓冲区的高度 |
PreferredBackBufferWidth |
屏幕缓冲区的宽度 |
GraphicsDeviceManager对象常用的方法:
方法名称 |
说明 |
ToggleFullScreen |
在窗口模式和全屏幕模式中切换 |
Demo 演示
下面通过一个小DEMO来了解XNA for Windows Phone 的游戏框架,先看下图演示:
整个过程的代码量并不多,大部分都由XNA模板为我们生成,全部代码如下:
//以XNA为基础的游戏程序必须在初始化的时候声明GraphicsDeviceManager的对象,并设定游戏界面的高度与宽度
GraphicsDeviceManagergraphics;
SpriteBatchspriteBatch;//SpriteBatch主要显示2D图像,包括游戏背景、游戏人物、游戏的状态和菜单
publicGame1()
{
graphics=newGraphicsDeviceManager(this);
Content.RootDirectory="Content";
graphics.PreferredBackBufferHeight=480;//创建一个画面高度为480的屏幕
graphics.PreferredBackBufferWidth=800;//创建一个画面宽度为800的屏幕
//负责控制游戏程序更新状态及显示内容的频率
TargetElapsedTime=TimeSpan.FromTicks(333333);//设定游戏每秒更新30次,这里并不一定适合PC机或XBOX
}
///<summary>
///Allowsthegametoperformanyinitializationitneedstobeforestartingtorun.
///Thisiswhereitcanqueryforanyrequiredservicesandloadanynon-graphic
///relatedcontent.Callingbase.Initializewillenumeratethroughanycomponents
///andinitializethemaswell.
///负责游戏的初始化动作
///</summary>
protectedoverridevoidInitialize()
{
//TODO:Addyourinitializationlogichere
base.Initialize();
}
Texture2Duser=null;//声明一个可加载图像素材的Texture2D
///<summary>
///LoadContentwillbecalledoncepergameandistheplacetoload
///allofyourcontent.
///</summary>
protectedoverridevoidLoadContent()
{
//CreateanewSpriteBatch,whichcanbeusedtodrawtextures.
spriteBatch=newSpriteBatch(GraphicsDevice);
//TODO:usethis.Contenttoloadyourgamecontenthere
user=Content.Load<Texture2D>("user");//通过Content项目将user的图片加载进来
}
///<summary>
///UnloadContentwillbecalledoncepergameandistheplacetounload
///allcontent.
///负责执行释放资源的动作
///以XNA为基础的应用程序只需要释放非ContentManager管理的资源即可,
///即未通过ContentManager的Add方法加入到ContentManager进行管理的资源
///才有需要在此方法执行翻译资源的动作
///</summary>
protectedoverridevoidUnloadContent()
{
//TODO:UnloadanynonContentManagercontenthere
}
intpos=0;//记录人物当前的位置
//负责更新游戏的状态,但不负责更新游戏的画面
///<summary>
///Allowsthegametorunlogicsuchasupdatingtheworld,
///checkingforcollisions,gatheringinput,andplayingaudio.
///</summary>
///<paramname="gameTime">Providesasnapshotoftimingvalues.</param>
protectedoverridevoidUpdate(GameTimegameTime)
{
//Allowsthegametoexit
//如果在游戏中按下BACK键则结束游戏
if(GamePad.GetState(PlayerIndex.One).Buttons.Back==ButtonState.Pressed)
this.Exit();
if(pos<=300)
{
pos++;
}
//TODO:Addyourupdatelogichere
base.Update(gameTime);
}
//Vector22维空间坐标
//跟update相反。Draw负责更新游戏的画面
///<summary>
///Thisiscalledwhenthegameshoulddrawitself.
///</summary>
///<paramname="gameTime">Providesasnapshotoftimingvalues.</param>
protectedoverridevoidDraw(GameTimegameTime)
{
GraphicsDevice.Clear(Color.CornflowerBlue);
//TODO:Addyourdrawingcodehere
spriteBatch.Begin();//给spriteBatch下命令准备开始动作
Vector2vect=newVector2(pos,10);//创建一个x为用户所在位置,y为10的Vector2对象
//将user按Vector2指定的位置开始画图
spriteBatch.Draw(user,vect,Color.White);
//停止时打印出stop
spriteBatch.End();//给spriteBatch下命令结束动作
base.Draw(gameTime);
}
}
2D与坐标
Texture2D是用来管理2D图形资源,常用属性为:
属性名称 |
说明 |
Bounds |
代表图形资源的大小 |
Format |
代表图形资源的格式 |
GraphicsDevice |
取得游戏程序使用的绘图装置的属性 |
Height |
图形资源的高度(单位:pixel) |
Width |
图形资源的宽度(单位:pixel) |
Vector2是用来加载2D图像资源显示到游戏界面时定义的空间坐标
引用之Windows Phone 官网
Vector2 的结构数据成员为
数据成员名称 |
说明 |
X |
代表坐标点的X轴的位置 |
Y |
代表坐标点的Y轴的位置 |
常用到的方法列表:
方法名称 |
说明 |
Add |
对坐标点执行加法运算 |
Clamp |
限制坐标内容值必须落在指定的范围之间 |
Distance |
计算两个坐标点之间的距离 |
DistanceSquared |
计算两个坐标点之间的距离的平方 |
Divide |
对坐标点执行除法运算 |
Equals |
判断坐标点是否等于指定的坐标点 |
Lerp |
计算两个坐标点之间的线性内插 |
Max |
计算坐标点的最大值 |
Min |
计算坐标点的最小值 |
Multiply |
对坐标点执行乘法运算 |
Negate |
对坐标点执行反运算 |
Subtract |
对坐标点执行减法运算 |
Transform |
对坐标点执行转置 (Transform) 运算 |
总体上来说XNA游戏开发,可以同时向多个平台延伸,只要注意好尺寸的不同和微调下代码即可。
DEMO下载:源码
本文参考自Windows Phone 7 官方教程
分享到:
相关推荐
XWinForm(XNA2.0)——XNA虚拟WinForm窗体 XWinForm(XNA2.0)——XNA虚拟WinForm窗体 XWinForm(XNA2.0)——XNA虚拟WinForm窗体
XWinForm——XNA虚拟WinForm窗体 XWinForm——XNA虚拟WinForm窗体 XWinForm——XNA虚拟WinForm窗体 XWinForm——XNA虚拟WinForm窗体
Windows Phone 7 XNA游戏开发技术中有关声音控制的编程技术介绍。
wp7 xna开发最强教程,让你最快的学习xna开发,能够写出一个小的游戏。
XNA——COOKBOOK游戏设计指导(英文版电子书) XNA平台游戏步骤详解
Microsoft 的 XNA 游戏开发 资料。
Xna游戏编辑器框架——WinForm内嵌Xna
一个WP XNA 开发的纸牌游戏源码,适用于学习WP开发教程
Direct 3D与XNA游戏开发源码,很优秀的书,很优秀的源代码。
Direct 3D与XNA游戏开发光盘资源(6卷).part3
全书206页,涵盖了Window Phone 7 开发基础,Silverlight 交互开发和XNA 游戏开发。本文件包含例子,pdf版本,方便在离线的时候学习 以下是本书目录 Window Phone 7 开发基础: 第一章 Windows Phone 7 智能型手机 ...
xna游戏快速入门框架xna游戏快速入门框架
xna游戏案例集合,xna游戏案例集合
XNA游戏开发SDK安装包,安装后在Visual Studio中可以做XNA游戏项目
新手学习wp7 xna的简单例子,能够快速理解xna框架,实现了声音,动画,手势控制,开始画面等功能
XNA 游戏编程学习总结2D与3D实现-2D源碼
Direct.3D和XNA游戏开发基础(C#语言版)
介绍了Direct_3D的基础知识与XNA游戏开发基础
这是一个XNA游戏的示例代码,自己做了些修改,版本为XNA4.0 VS端.NET 4.0的。