创建第一个XNA程序:Hello XNA

2015-09-30 14:31:12来源:作者:人点击

下面创建一个简单的Windows Phone 7的XNA程序,只是一个Hello XNA的文本,从屏幕的左上角一直往右下角移动,通过该例子来开始Windows Phone 7 XNA的游戏编程。

新建一个项目后可以看到这样的一个项目工程结构,如图所示。

项目工程结构

Content项目是表示游戏的资源文件,相关游戏的资源就需要在Content目录下进行添加。

看一下Game1.cs这个主要的类:

usingSystem; usingSystem.Collections.Generic; usingSystem.Linq; usingMicrosoft.Xna.Framework; usingMicrosoft.Xna.Framework.Audio; usingMicrosoft.Xna.Framework.Content; usingMicrosoft.Xna.Framework.GamerServices; usingMicrosoft.Xna.Framework.Graphics; usingMicrosoft.Xna.Framework.Input; usingMicrosoft.Xna.Framework.Input.Touch; usingMicrosoft.Xna.Framework.Media; namespaceHelloWorldXNA { ///<summary>///游戏的主要主体类 ///</summary>publicclassGame1:Microsoft.Xna.Framework.Game { GraphicsDeviceManagergraphics;//用于管理图形设备 SpriteBatchspriteBatch;//游戏的图形设备来画2D对象 SpriteFontspriteFont1;//字体 Viewportviewport;//窗体 Vector2textSize;//字体大小二维向量 Vector2textPosition;//字体位置 publicGame1() { graphics=newGraphicsDeviceManager(this); Content.RootDirectory="Content"; //Framerateis30fpsbydefaultforWindowsPhone. TargetElapsedTime=TimeSpan.FromTicks(333333); //Extendbatterylifeunderlock. InactiveSleepTime=TimeSpan.FromSeconds(1); } ///<summary>///游戏运行前的一些初始化 ///</summary>protectedoverridevoidInitialize() { //在这里添加游戏的一些初始化处理 base.Initialize(); } ///<summary>///加载游戏资源,LoadContent只会执行一次 ///</summary>protectedoverridevoidLoadContent() { //CreateanewSpriteBatch,whichcanbeusedtodrawtextures. spriteBatch=newSpriteBatch(GraphicsDevice); //TODO:usethis.Contenttoloadyourgamecontenthere viewport=this.GraphicsDevice.Viewport;//获取游戏的窗体 spriteFont1=this.Content.Load<SpriteFont>("SpriteFont1");//加载字体资源 textSize=spriteFont1.MeasureString("Hello,XNA!");//返回字符创的高度和宽度 textPosition=newVector2(0,0); } ///<summary>///游戏退出,回收资源 ///</summary>protectedoverridevoidUnloadContent() { //TODO:UnloadanynonContentManagercontenthere } ///<summary>///绘制游戏前的更新处理 ///</summary>///<paramname="gameTime">游戏的当前时间对象</param>protectedoverridevoidUpdate(GameTimegameTime) { //Allowsthegametoexit if(GamePad.GetState(PlayerIndex.One).Buttons.Back==ButtonState.Pressed) this.Exit(); //TODO:Addyourupdatelogichere if(textPosition.X<viewport.Height) { textPosition.Y+=10*(float)gameTime.ElapsedGameTime.TotalSeconds; textPosition.X+=20*(float)gameTime.ElapsedGameTime.TotalSeconds; } else { textPosition.Y-=10000*(float)gameTime.ElapsedGameTime.TotalSeconds; textPosition.X-=20000*(float)gameTime.ElapsedGameTime.TotalSeconds; } base.Update(gameTime); } ///<summary>///绘制游戏 ///</summary>///<paramname="gameTime">游戏的当前时间对象</param>protectedoverridevoidDraw(GameTimegameTime) { GraphicsDevice.Clear(Color.CornflowerBlue); //TODO:Addyourdrawingcodehere spriteBatch.Begin(); spriteBatch.DrawString(spriteFont1,"Hello,XNA!",textPosition,Color.Red); spriteBatch.End(); base.Draw(gameTime); } } }

运行的效果如下:

运行效果

对于新建一个XNA for WP7的工程,可以看到在它的工程文件中,有:Initialize(), LoadContent(), Update(),Draw()这几个主要的函数,那由些也就可以看得出XNA开发游戏的一个基本架构了:

Loading:用来加载保证游戏可以正常运行的所有资源等,这个状态在整个系统中只在游戏开始前运行,也就是说整个游戏的生命周期中只运行一次。

Update:这个状态是由所设置的时间间隔来驱动的,在每个时间间隔里重新计算游戏中各角色的状态,以及游戏分值和各种游戏逻辑。一般默认为每秒30次(帧),如果设置间隔过大,游戏可能无法启动。

Draw:这个状态也是由所设置的时间间隔来驱动的,用来绘制各种变化到显示设置上。

对于XNA资源,在创建新的工程时,就一起创建了一个Content工程,所有的资源(图片、声音、视频、字体、3D造形、纹理等)都要加载到这个工程中,并被这个工程编译为.xnb格式的XNA二进制文件,这样才可以加载到游戏中,并被调用。

XNA游戏的生命周期如图所示:

XNA游戏的生命周期

1.GraphicsDeviceManager:在XNA类库介绍中提到的该类型是非常重要的。它为开发者提供方法来管理目标设备的显卡资源。简单地说就是调用显卡的一个接口,该对象的GraphicsDevice属性代表当前目标设备的显卡。

2.SpriteBatch:该对象主要的作用是绘制文字和2D图像。在游戏开发过程中,它的作用是非常重要的,因为游戏需要大部分图片、文字和声音等素材资源。所有游戏中需要显示的画面都必须经过SpriteBatch对象中的Draw方法来绘制。

3.Initialize( ):该方法用来初始化游戏程序的变量和对象。它允许游戏在运行之前做一些初始化的工作。可以在此查询任何需要的服务和载入与图形无关的内容。例如,显卡设备、游戏分数设置等。

4.LoadContent( ):当初始化完毕后,程序就进入LoadContent,该方法用来加载游戏的素材,包括游戏的模式、声音、图像等。这个方法在一个游戏中只会被调用一次,并且是加载所有素材的地方。

5.Update( ):该方法相当于Direct3D中的FrameMove,简单地说就是在图形上修改当前画面。它主要用于游戏执行一些逻辑,如:刷新画面、检查碰撞、更新分数、检测游戏进程、收集输入数据以及播放音频等。

6.Draw( ):该方法相当于Windows编程的Paint或者OnPaint,是系统自动绘图的方法。

游戏程序执行完LoadContent后,开始进入一个游戏循环,无论用什么语言编写游戏程序,都需要一个游戏循环,这也是游戏程序与应用程序的最大区别。在XNA游戏项目中,游戏循环主要由Update和Draw两个方法组成。

原文链接:http://www.cnblogs.com/linzheng/archive/2011/09/20/2182964.html

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台