XNA入门/框架介绍
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文件内容如下:
- using System;
- namespace WindowsGame3
- {
- static class Program
- {
- /// <summary>
- /// The main entry point for the application.
- /// </summary>
- static void Main(string[] args)
- {
- using (Game1 game = new Game1())
- {
- game.Run();
- }
- }
- }
- }
说明Program.cs文件只是个入口函数,这个是不用更改的,自己的编程还是放在Game1.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;
- using Microsoft.Xna.Framework.Net;
- using Microsoft.Xna.Framework.Storage;
- namespace WindowsGame3
- {
- public class Game1 : Microsoft.Xna.Framework.Game
- {
- GraphicsDeviceManager graphics;
- SpriteBatch spriteBatch;
- public Game1()
- {
- graphics = new GraphicsDeviceManager(this);
- Content.RootDirectory = "Content";
- }
- protected override void Initialize()
- {
- // TODO: Add your initialization logic here
- base.Initialize();
- }
- protected override void LoadContent()
- {
- // Create a new SpriteBatch, which can be used to draw textures.
- spriteBatch = new SpriteBatch(GraphicsDevice);
- // TODO: use this.Content to load your game content here
- }
- protected override void UnloadContent()
- {
- // TODO: Unload any non ContentManager content here
- }
- protected override void Update(GameTime gameTime)
- {
- if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
- this.Exit();
- base.Update(gameTime);
- }
- protected override void Draw(GameTime gameTime)
- {
- GraphicsDevice.Clear(Color.CornflowerBlue);
- base.Draw(gameTime);
- }
- }
- }
为了观察方便,我删去了大部分注释。
我们可以看到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函数添加代码,
- protected override void Draw(GameTime gameTime)
- {
- GraphicsDevice.Clear(Color.CornflowerBlue);
- // TODO: Add your drawing code here
- spriteBatch.Begin();
- spriteBatch.DrawString(Content.Load<SpriteFont>("SpriteFont1"),
- "Hello World", Vector2.Zero, Color.Yellow);
- spriteBatch.End();
- base.Draw(gameTime);
- }
其中spriteBatch的详细介绍自己去查相关资料,这里我们只用了解,我们所有的绘制都在这个上面进行就可以了。
绘制代码需要放到spriteBatch.Begin(); 和spriteBatch.End(); 之间,就像OpenGL中的Begin一样,
然后我们调用DrawString方法实现文本的绘制。其中第一个参数为字体,第三个参数为显示坐标。
我们再到构造函数中添加两行代码,改变一下窗体大小:
- public Game1()
- {
- graphics = new GraphicsDeviceManager(this);
- Content.RootDirectory = "Content";
- graphics.PreferredBackBufferWidth = 300;
- graphics.PreferredBackBufferHeight = 100;
- }
效果如下:
三、图像的绘制
看图说话,没什么好讲的。
在Draw添加一句,改成如下:
- protected override void Draw(GameTime gameTime)
- {
- GraphicsDevice.Clear(Color.CornflowerBlue);
- // TODO: Add your drawing code here
- spriteBatch.Begin();
- spriteBatch.DrawString(Content.Load<SpriteFont>("SpriteFont1"),
- "Hello World", Vector2.Zero, Color.Yellow);
- spriteBatch.Draw(Content.Load<Texture2D>("cat"),new Vector2(100f,30f), Color.White);
- spriteBatch.End();
- base.Draw(gameTime);
- }
四、进阶
至此,图像已经显示出来了,要进行什么动画之类的,也只用简单的改改绘制坐标就可以了,当然XNA中还有大量的东西等待读者自己去探索,
比如XACT声音的加载,游戏组件,碰撞检测,3d绘制,等等
这些就超过本文的范围了。
Good Luck~
winxos 2010-09-05
转载于:https://blog.51cto.com/winxos/387484
XNA入门/框架介绍相关推荐
- ❤️六万字《SpringMVC框架介绍—从入门到高级》(建议收藏)❤️
<SpringMVC框架介绍>(建议收藏) ❤️希望博友给个三连+关注!!! SSM: mybatis + Spring + SpringMVC MVC三层架构 SpringMVC + V ...
- 流行的9个Java框架介绍: 优点、缺点等等
流行的9个Java框架介绍: 优点.缺点等等 在 2018年,Java仍然是世界上最流行的编程语言.它拥有一个巨大的生态系统,在全世界有超过900万Java开发人员.虽然Java不是最直接的语言,但是 ...
- 二.激光SLAM框架学习之A-LOAM框架---介绍及其演示
专栏系列文章如下: 一:Tixiao Shan最新力作LVI-SAM(Lio-SAM+Vins-Mono),基于视觉-激光-惯导里程计的SLAM框架,环境搭建和跑通过程_goldqiu的博客-CSDN ...
- 【无标题】C#nbsp;语言入门基础介绍学习通http://www.bdgxy.com/
文章来源: 学习通http://www.bdgxy.com/ 普学网http://www.boxinghulanban.cn/ 智学网http://www.jaxp.net/ 表格制作excel教程h ...
- Android/Linux 子系统Graphics图形栈入门普法介绍
Android/Linux 子系统Graphics图形栈入门普法介绍 写在最前面 由于工作原因,最近在公司做了一个关于Android/Linux 子系统Graphics图形栈入门相关知识的 ...
- 百度官方文档Plus版,PaddlePaddle深度学习框架介绍
作者:木羊同学 来源:华章计算机(hzbook_jsj) 现在深度学习框架不但内卷严重,而且头部效应明显.一提起深度学习框架,首先想到的肯定是Google家的TensorFlow,和Facebook家 ...
- 国产首款——飞桨PaddlePaddle深度学习框架介绍
现在深度学习框架不但内卷严重,而且头部效应明显.一提起深度学习框架,首先想到的肯定是Google家的TensorFlow,和Facebook家的PyTorch.究竟排名谁先谁后,还要看你是工业界还是学 ...
- XNA入门教程----(一)
写在前面: 前阵子看到cnblogs上的牛人用silverlight/WPF写游戏,不由心血来潮也尝试写个. 众所周知,虽说从silverlight2开始ms就提供了Isolated Storage的 ...
- Docker新手入门详细介绍
Docker新手入门详细介绍 Docker 起源于 dotCloud 公司的内部项目,于 2013 年 3 月以 Apache 2.0 授权协议开源,主要项目代码在 GitHub 上进行维护,2013 ...
最新文章
- 字符串转换整数 (atoi)
- 349.两个数组的交集
- 《LeetCode力扣练习》剑指 Offer 05. 替换空格 Java
- 常用16种视图切换动画
- Qt Creator建立和运行
- IT 人永远不老,老程序员价值何在?
- 张正友标定Opencv实现、标定流程以及图像坐标转为世界坐标
- android google map 标记,android google map添加标记和TipView
- 基于tensorflow 1.x 的bert系列预训练模型工具
- 解压出来的文件md5会改变吗_监控Linux文件变化,防止系统被黑
- Python爬取当当网图书数据
- 计算机考研408每日一题 day161
- 共享服务器文件溢出,文件共享锁定数溢出
- 【例题】利用伴随矩阵求逆矩阵
- 2022-2028年全球与中国便携式茶包市场现状及未来发展趋势分析报告
- 删除word中自己插入的单行、双行线
- poi 操作 导出excel 合并列
- 免费Bootstrap后台管理模板
- 阿里云ACA证书有什么用?
- 【Excel】给自己做个2020年高考倒计时
热门文章
- html圆圈里边有个c,商标是圆圈加字母-商标上圆圈里有个C,这个是什么意思?...
- 附录C Java编程简史
- Wordpress + Markdown终极搭配
- 计算机启动F1正在准备自动修复,win10系统卡在正在准备自动修复如何解决
- 空压机远程监控系统解决方案
- 官方新出的 Kotlin 扩展库 KTX,到底帮你干了什么?
- 张驰课堂:一文看懂SPC(六西格玛工具)
- 张驰咨询:供应链降本的五条原则与五种方法
- 托福听力考试与大学英语六级听力考试的对比浅析|8:15~8:50
- 计算机国家级证书有哪些?