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

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

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

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

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using Microsoft.Xna.Framework;
  5. using Microsoft.Xna.Framework.Audio;
  6. using Microsoft.Xna.Framework.Content;
  7. using Microsoft.Xna.Framework.GamerServices;
  8. using Microsoft.Xna.Framework.Graphics;
  9. using Microsoft.Xna.Framework.Input;
  10. using Microsoft.Xna.Framework.Input.Touch;
  11. using Microsoft.Xna.Framework.Media;
  12. namespace HelloWorldXNA
  13. {
  14. /// <summary>
  15. /// 游戏的主要主体类
  16. /// </summary>
  17. public class Game1 : Microsoft.Xna.Framework.Game
  18. {
  19. GraphicsDeviceManager graphics;//用于管理图形设备
  20. SpriteBatch spriteBatch;//游戏的图形设备来画2D对象
  21. SpriteFont spriteFont1;//字体
  22. Viewport viewport;//窗体
  23. Vector2 textSize;//字体大小 二维向量
  24. Vector2 textPosition;//字体位置
  25. public Game1()
  26. {
  27. graphics = new GraphicsDeviceManager(this);
  28. Content.RootDirectory = "Content";
  29. // Frame rate is 30 fps by default for Windows Phone.
  30. TargetElapsedTime = TimeSpan.FromTicks(333333);
  31. // Extend battery life under lock.
  32. InactiveSleepTime = TimeSpan.FromSeconds(1);
  33. }
  34. /// <summary>
  35. /// 游戏运行前的一些初始化
  36. /// </summary>
  37. protected override void Initialize()
  38. {
  39. //在这里添加游戏的一些初始化处理
  40. base.Initialize();
  41. }
  42. /// <summary>
  43. /// 加载游戏资源,LoadContent只会执行一次
  44. /// </summary>
  45. protected override void LoadContent()
  46. {
  47. // Create a new SpriteBatch, which can be used to draw textures.
  48. spriteBatch = new SpriteBatch(GraphicsDevice);
  49. // TODO: use this.Content to load your game content here
  50. viewport = this.GraphicsDevice.Viewport;//获取游戏的窗体
  51. spriteFont1 = this.Content.Load<SpriteFont>("SpriteFont1");//加载字体资源
  52. textSize = spriteFont1.MeasureString("Hello,XNA!");//返回字符创的高度和宽度
  53. textPosition = new Vector2(0, 0);
  54. }
  55. /// <summary>
  56. /// 游戏退出,回收资源
  57. /// </summary>
  58. protected override void UnloadContent()
  59. {
  60. // TODO: Unload any non ContentManager content here
  61. }
  62. /// <summary>
  63. /// 绘制游戏前的更新处理
  64. /// </summary>
  65. /// <param name="gameTime">游戏的当前时间对象</param>
  66. protected override void Update(GameTime gameTime)
  67. {
  68. // Allows the game to exit
  69. if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
  70. this.Exit();
  71. // TODO: Add your update logic here
  72. if (textPosition.X < viewport.Height)
  73. {
  74. textPosition.Y += 10 * (float)gameTime.ElapsedGameTime.TotalSeconds;
  75. textPosition.X += 20 * (float)gameTime.ElapsedGameTime.TotalSeconds;
  76. }
  77. else
  78. {
  79. textPosition.Y -= 10000 * (float)gameTime.ElapsedGameTime.TotalSeconds;
  80. textPosition.X -= 20000 * (float)gameTime.ElapsedGameTime.TotalSeconds;
  81. }
  82. base.Update(gameTime);
  83. }
  84. /// <summary>
  85. /// 绘制游戏
  86. /// </summary>
  87. /// <param name="gameTime">游戏的当前时间对象</param>
  88. protected override void Draw(GameTime gameTime)
  89. {
  90. GraphicsDevice.Clear(Color.CornflowerBlue);
  91. // TODO: Add your drawing code here
  92. spriteBatch.Begin();
  93. spriteBatch.DrawString(spriteFont1, "Hello,XNA!", textPosition, Color.Red);
  94. spriteBatch.End();
  95. base.Draw(gameTime);
  96. }
  97. }
  98. }

运行的效果如下:

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

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

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

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

对于XNA资源,在创建新的工程时,就一起创建了一个Content工程,所有的资源(图片、声音、视频、字体、3D造形、纹理等)都要加载到这个工程中,并被这个工程编译为.xnb格式的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两个方法组成。

转载于:https://blog.51cto.com/linzheng/1078473

XNA游戏:Hello XNA相关推荐

  1. XNA游戏开发之(六)——保存游戏数据

    [原创]Alex 游戏过程中,通常需要存储游戏状态.在下次启动游戏时,重新载入游戏,继续游戏. 实现过程非常简单,首先建立一个结构体定义需要保存的游戏参数,然后通过XmlSerializer类将其保存 ...

  2. Xna游戏编辑器开发(WinForm内嵌Xna)

    声明:如下文章创作版权归 上海八中物理组 所有,此处仅为收藏及共享之用,转载请按如下方式显示标明原文出处,以示尊重!! 原文出处:http://shiba.hpe.sh.cn/jiaoyanzu/wu ...

  3. Win8 Metro App里玩XNA:移植XNA游戏到Win8

    Win8 Metro App里玩XNA:移植XNA游戏到Win8   Ready ! 在本文中,将把一个WindowsPhoneXNA的游戏移植到Win8 Metro(Modern)风格上,直接在Wi ...

  4. XNA游戏——泡泡堂

    首先声明,这个游戏原本是中国XNA开发网(http://www.xnadev.cn/) 上的.原作就是一个很精彩的游戏,图形使用了盛大的图像,游戏也设计得十分精彩.但是原作品没有完成,起码还缺少音效等 ...

  5. XNA游戏开发之字符篇

    摘要: 游戏中开发不同于一般应用程序的开发,它更注重于界面美观,我们需要在游戏界面设计中花费大量的时间以便使它看起来更炫.更酷,当然这其中就少不了游戏中的字符文本,那么如何制作出漂亮的游戏文本呢?今天 ...

  6. XNA游戏:手势触控

    在XNA游戏中使用到手势触控操作时,需要引入using Microsoft.Xna.Framework.Input.Touch; 空间,在该空间下下面两个类在触控编程中会用到. TouchLocati ...

  7. XNA游戏:重力感应

    Windows Phone XNA游戏提供的重力传感器可以利用量测重力的原理判手机移动的方向,允许使用者利用摇动或甩动手机的方式控制游戏的执行,其原理和汽车的安全气囊相同,在侦测到汽车快速减速的时候立 ...

  8. XNA游戏:各种输入测试 上

    测试XNA游戏中键盘输入,触控输入,按钮输入 Game1.cs using System; using System.Collections.Generic; using System.Linq; u ...

  9. xnawindowsphCocos2d-x for XNA游戏引擎全面支持WP7

    近日,开源社区cocos2d-x.org针对微软移动操作系统WindowsPhone7平台发布了一款新的游戏引擎,并正式命名为cocos2d-xforXNA.从此,开发者无需学习XNA绘图接口就可采用 ...

最新文章

  1. poj3122(二分算法)
  2. IDEA如何将项目中文件夹设置为Sources(蓝色)
  3. 让Ubuntu自动登录到X
  4. SDWebImage的使用及图片不改变问题的解决
  5. 搭建web服务器,发布站点
  6. 怎么用python读取csv文件、并且是读取行-python读取csv文件指定行的2种方法详解...
  7. opencv 使用cvload加载xml出现错误原因解析及方法
  8. 手机python利器能做什么_推荐一款开发利器!既能写Python,又能写Java
  9. java-io之RandomAccessFile
  10. 4源代码的下载和编译
  11. 关于移动手机端富文本编辑器qeditor图片上传改造
  12. php mysql 图像_php-向/从MySQL数据库插入/查看图像
  13. getParameterMap()的返回值为MapString, String[],从其中取得请求参数转为MapString, String的方法如下:...
  14. [转]:xmake工程描述编写之选择性编译
  15. 《 Python笔记》— 将pyinstalller打包封装的exe文件反编译为pyc文件和python文件
  16. Maven项目之一号店——注册与登录
  17. iOS跳转到设置和其他APP的那些事
  18. 怎样改计算机密码忘了怎么办,电脑设置的密码忘了怎么办
  19. Selenium finds和find的耗时性能比对
  20. ContextCapture Master 倾斜摄影测量实景三维建模技术

热门文章

  1. .Net Core应用框架Util介绍(五)
  2. 网络工程:3.1 RIP(Routing Information Protocol)协议
  3. 五、案例-指令参考-freemarker指令、表达式
  4. 英语 用on还是/at/还是in
  5. [转]基于Starling移动项目开发准备工作
  6. 一个表单同时向两个页面传值
  7. 通过Ajax解析和jQuery写了一个小小的导航条
  8. C#与.NET程序员面试宝典 1.3 投递简历
  9. Hadoop(5)-Hive
  10. linux新建用户,用户组,以及权限的分配(摘自博客园)