XNA是Microsoft为了简化游戏编程,而向公众推出的一个游戏开发框架。

详细的介绍以及教程请到

微软官方站点 http://creators.xna.com/en-US/
或者
不错的中文站点:http://xna.omgsoft.com.cn/ 了解。

本文假定读者已经对编程有了初步的了解,只讲解一下XNA相关的东西。

大家一步步跟我做:

先从官网下载 xna开发包,以及C# express 2008,安装好后就可以开始了。
我自己用的是 XNA Game Studio 3.1 和 C# express 版本。

一、新建工程

我们选择Windows Game(3.1),OK

打开项目工程,我们主要留意其中的Content文件夹以及Game1.cs和Program.cs文件。
Program.cs文件内容如下:

  1. using System;
  2. namespace WindowsGame3
  3. {
  4. static class Program
  5. {
  6. /// <summary>
  7. /// The main entry point for the application.
  8. /// </summary>
  9. static void Main(string[] args)
  10. {
  11. using (Game1 game = new Game1())
  12. {
  13. game.Run();
  14. }
  15. }
  16. }
  17. }

说明Program.cs文件只是个入口函数,这个是不用更改的,自己的编程还是放在Game1.cs中。 默认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.Media;
  11. using Microsoft.Xna.Framework.Net;
  12. using Microsoft.Xna.Framework.Storage;
  13. namespace WindowsGame3
  14. {
  15. public class Game1 : Microsoft.Xna.Framework.Game
  16. {
  17. GraphicsDeviceManager graphics;
  18. SpriteBatch spriteBatch;
  19. public Game1()
  20. {
  21. graphics = new GraphicsDeviceManager(this);
  22. Content.RootDirectory = "Content";
  23. }
  24. protected override void Initialize()
  25. {
  26. // TODO: Add your initialization logic here
  27. base.Initialize();
  28. }
  29. protected override void LoadContent()
  30. {
  31. // Create a new SpriteBatch, which can be used to draw textures.
  32. spriteBatch = new SpriteBatch(GraphicsDevice);
  33. // TODO: use this.Content to load your game content here
  34. }
  35. protected override void UnloadContent()
  36. {
  37. // TODO: Unload any non ContentManager content here
  38. }
  39. protected override void Update(GameTime gameTime)
  40. {
  41. if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
  42. this.Exit();
  43. base.Update(gameTime);
  44. }
  45. protected override void Draw(GameTime gameTime)
  46. {
  47. GraphicsDevice.Clear(Color.CornflowerBlue);
  48. base.Draw(gameTime);
  49. }
  50. }
  51. }

为了观察方便,我删去了大部分注释。
我们可以看到Game1 继承自 Microsoft.Xna.Framework.Game
我们可以发现重载的函数为 Initialize(), LoadContent(), UnloadContent(), Update(GameTime gameTime), Draw(GameTime gameTime)
我们先了解一下通常的游戏编程,
游戏与普通应用程序不用,游戏要时时刻刻有个东西在后台工作,计算,所以游戏中有一个主循环,
第一次启动的时候,要先加载资源,比如图片、声音什么的,
然后每一次刷新的时候,要先进行相关角色动画计算,碰撞检测等等,
最后再把图像渲染出来,
然后再次循环。
所以顾名思义,XNA的函数从名字上以及注释上,我们每个函数都可以非常清楚了。
需要注意一下的是GameTime gameTime这个传入参数实际上维护着系统时钟相关的东西,比如游戏执行事件,是否刷新完全等等。 Content文件夹用于存放各种游戏相关的资源,因为资源的读取使用方式多种,且格式多样,MS为了简便,于是将资源统一化,
所有的资源都先转换成xnb类型文件,然后统一调用,这样我们就不用关注各种不同资源的调用细节。这真是很方便呢!

二、Do it!
我们先来写一个最简单的Hello World
要让文字渲染显示出来,必须要建立相应的字体,还好这个过程比较简单:

我们在项目管理器的Content文件夹上点右键,新建项,然后选择上面的Sprite Font 类型项。

左键单击刚添加到Content文件夹里面的SpriteFont1.spritefont,我们发现属性栏中有Asset Name,这是非常重要的属性,
所有的Content资源调用的时候都是通过这个名字来识别,而不是通过文件名。
我们双击刚才的字体文件,打开了一个xml文件,一看很容易理解这就是字体的各种参数设置,比如字体大小什么的,这里我们把字体大小改成34或者其他数值,其他不动。
然后我们要想把它显示出来,所以我们应该在Draw函数添加代码,

  1. protected override void Draw(GameTime gameTime)
  2. {
  3. GraphicsDevice.Clear(Color.CornflowerBlue);
  4. // TODO: Add your drawing code here
  5. spriteBatch.Begin();
  6. spriteBatch.DrawString(Content.Load<SpriteFont>("SpriteFont1"),
  7. "Hello World", Vector2.Zero, Color.Yellow);
  8. spriteBatch.End();
  9. base.Draw(gameTime);
  10. }

其中spriteBatch的详细介绍自己去查相关资料,这里我们只用了解,我们所有的绘制都在这个上面进行就可以了。
绘制代码需要放到spriteBatch.Begin(); 和spriteBatch.End(); 之间,就像OpenGL中的Begin一样,
然后我们调用DrawString方法实现文本的绘制。其中第一个参数为字体,第三个参数为显示坐标。
我们再到构造函数中添加两行代码,改变一下窗体大小:

  1. public Game1()
  2. {
  3. graphics = new GraphicsDeviceManager(this);
  4. Content.RootDirectory = "Content";
  5. graphics.PreferredBackBufferWidth = 300;
  6. graphics.PreferredBackBufferHeight = 100;
  7. }

效果如下:

三、图像的绘制

看图说话,没什么好讲的。

在Draw添加一句,改成如下:

  1. protected override void Draw(GameTime gameTime)
  2. {
  3. GraphicsDevice.Clear(Color.CornflowerBlue);
  4. // TODO: Add your drawing code here
  5. spriteBatch.Begin();
  6. spriteBatch.DrawString(Content.Load<SpriteFont>("SpriteFont1"),
  7. "Hello World", Vector2.Zero, Color.Yellow);
  8. spriteBatch.Draw(Content.Load<Texture2D>("cat"),new Vector2(100f,30f), Color.White);
  9. spriteBatch.End();
  10. base.Draw(gameTime);
  11. }

四、进阶

至此,图像已经显示出来了,要进行什么动画之类的,也只用简单的改改绘制坐标就可以了,当然XNA中还有大量的东西等待读者自己去探索,
比如XACT声音的加载,游戏组件,碰撞检测,3d绘制,等等
这些就超过本文的范围了。

Good Luck~

winxos 2010-09-05

转载于:https://blog.51cto.com/winxos/387484

XNA入门/框架介绍相关推荐

  1. ❤️六万字《SpringMVC框架介绍—从入门到高级》(建议收藏)❤️

    <SpringMVC框架介绍>(建议收藏) ❤️希望博友给个三连+关注!!! SSM: mybatis + Spring + SpringMVC MVC三层架构 SpringMVC + V ...

  2. 流行的9个Java框架介绍: 优点、缺点等等

    流行的9个Java框架介绍: 优点.缺点等等 在 2018年,Java仍然是世界上最流行的编程语言.它拥有一个巨大的生态系统,在全世界有超过900万Java开发人员.虽然Java不是最直接的语言,但是 ...

  3. 二.激光SLAM框架学习之A-LOAM框架---介绍及其演示

    专栏系列文章如下: 一:Tixiao Shan最新力作LVI-SAM(Lio-SAM+Vins-Mono),基于视觉-激光-惯导里程计的SLAM框架,环境搭建和跑通过程_goldqiu的博客-CSDN ...

  4. 【无标题】C#nbsp;语言入门基础介绍学习通http://www.bdgxy.com/

    文章来源: 学习通http://www.bdgxy.com/ 普学网http://www.boxinghulanban.cn/ 智学网http://www.jaxp.net/ 表格制作excel教程h ...

  5. Android/Linux 子系统Graphics图形栈入门普法介绍

        Android/Linux 子系统Graphics图形栈入门普法介绍 写在最前面   由于工作原因,最近在公司做了一个关于Android/Linux 子系统Graphics图形栈入门相关知识的 ...

  6. 百度官方文档Plus版,PaddlePaddle深度学习框架介绍

    作者:木羊同学 来源:华章计算机(hzbook_jsj) 现在深度学习框架不但内卷严重,而且头部效应明显.一提起深度学习框架,首先想到的肯定是Google家的TensorFlow,和Facebook家 ...

  7. 国产首款——飞桨PaddlePaddle深度学习框架介绍

    现在深度学习框架不但内卷严重,而且头部效应明显.一提起深度学习框架,首先想到的肯定是Google家的TensorFlow,和Facebook家的PyTorch.究竟排名谁先谁后,还要看你是工业界还是学 ...

  8. XNA入门教程----(一)

    写在前面: 前阵子看到cnblogs上的牛人用silverlight/WPF写游戏,不由心血来潮也尝试写个. 众所周知,虽说从silverlight2开始ms就提供了Isolated Storage的 ...

  9. Docker新手入门详细介绍

    Docker新手入门详细介绍 Docker 起源于 dotCloud 公司的内部项目,于 2013 年 3 月以 Apache 2.0 授权协议开源,主要项目代码在 GitHub 上进行维护,2013 ...

最新文章

  1. 字符串转换整数 (atoi)
  2. 349.两个数组的交集
  3. 《LeetCode力扣练习》剑指 Offer 05. 替换空格 Java
  4. 常用16种视图切换动画
  5. Qt Creator建立和运行
  6. IT 人永远不老,老程序员价值何在?
  7. 张正友标定Opencv实现、标定流程以及图像坐标转为世界坐标
  8. android google map 标记,android google map添加标记和TipView
  9. 基于tensorflow 1.x 的bert系列预训练模型工具
  10. 解压出来的文件md5会改变吗_监控Linux文件变化,防止系统被黑
  11. Python爬取当当网图书数据
  12. 计算机考研408每日一题 day161
  13. 共享服务器文件溢出,文件共享锁定数溢出
  14. 【例题】利用伴随矩阵求逆矩阵
  15. 2022-2028年全球与中国便携式茶包市场现状及未来发展趋势分析报告
  16. 删除word中自己插入的单行、双行线
  17. poi 操作 导出excel 合并列
  18. 免费Bootstrap后台管理模板
  19. 阿里云ACA证书有什么用?
  20. 【Excel】给自己做个2020年高考倒计时

热门文章

  1. html圆圈里边有个c,商标是圆圈加字母-商标上圆圈里有个C,这个是什么意思?...
  2. 附录C Java编程简史
  3. Wordpress + Markdown终极搭配
  4. 计算机启动F1正在准备自动修复,win10系统卡在正在准备自动修复如何解决
  5. 空压机远程监控系统解决方案
  6. 官方新出的 Kotlin 扩展库 KTX,到底帮你干了什么?
  7. 张驰课堂:一文看懂SPC(六西格玛工具)
  8. 张驰咨询:供应链降本的五条原则与五种方法
  9. 托福听力考试与大学英语六级听力考试的对比浅析|8:15~8:50
  10. 计算机国家级证书有哪些?