XNA入门教程----(一)
写在前面:
前阵子看到cnblogs上的牛人用silverlight/WPF写游戏,不由心血来潮也尝试写个。
众所周知,虽说从silverlight2开始ms就提供了Isolated Storage的支持,但是,对于游戏这种大玩意儿,1M空间明显是不够的。于是乎,在silverlight中做游戏,别的不说,其资源的调度就严重依赖于服务器及网络了。
其次,WPF,由于其渲染本身基于directX,比起win32年代的winform更适合做form内的变换和刷新,但终究不非游戏框架,其本质是缺乏对界面消息循环的源生支持。虽说这对于windows app是简化了不少,但对游戏恐怕还不行。
偶然之间,发现ms的XNA,一款为dotnet爱好者准备的游戏开发框架。
何谓XNA:
XNA Framework 是建置于 .NET Framework 2.0上,另外还加入了一些专注于游戏开发上类别库,在指定的平台上使程式码重用达之最大效果。XNA Framework 在一个特别为有管理式游戏运行的通用语言执行层(Common Language Runtime)版本上运行。这个执行层支援Windows XP、Windows Vista和XBox 360。由于游戏是开发在执行层上,使得游戏能在所有支持XNA Framework 的平台上只要很少甚至不需要任何更改便能运行。现时所有在XNA Framework 上的游戏必需使用C #和XNA Game Studio Express IDE开发。
XNA Framework 把所有用作游戏编程的低阶技术包起来,由此,游戏开发员就可以专注于游戏内容开发而不用关心游戏移植至不同平台上的问题,游戏只要开发于XNA 的平台上,所有硬件只要支援XNA都能运行。XNA Framework 还内置一些工具,例如XACT以帮助游戏内容开发。这些工具还能帮助开发视觉和听觉效果和和像真度很高的模型制作。
XNA Framework 同时支持2D 和3D 的游戏开发也支援XBox 360 的控制器和震动效果。Xbox Live卖场可以升级开发者的XNA Game Studio Express 以使能把他们开发的游戏用于Xbox 360上。
由于XNA基于.NET 2.0,其开发效率比C++直接调用DirectX API 快了不少,对于我等业余的游戏开发者,是件好事。
XNA相关:
现在XNA最高版本已升级至3.1,并且加入了对Video的支持,并且需要在VS2008或其Express版本中安装。(至少理论上是,本人本地VS2008+2010+Win7屡次安装遭自动回滚,请教老外结果仍不理想,最终只能硬着头皮再安装个Express用于XNA)
其次,国内现在XNA的相关资源非常之少,严重依赖于相关英文参考。建议大家去看 Learning XNA 3.0-XNA 3.0 Game Development for the PC, Xbox 360, and Zune;XNA 3.0 Game Programming Recipes-A Problem-Solution Approach 和 Beginning XNA 3.0 Game Programming-From Novice to Professional相关的书,我看下来还是非常不错的。
貌似国内不少人正翻译或已经部分翻译此类文。
第一个XNA程序
安装完XNA Framework后,在VS中即出现XNA的相关项目Template. 我们随便创建一个名曰 WindowsGame1的XNA项目。
插一句
LoadContent用于加载游戏内的一些资源,如图像,文件,声音等。
紧接着,Update和Draw 便开始游戏内的消息循环,前者主要用于相关计算,后者用于绘制。
请注意,XNA源生的API不支持GIF,如果需要导入则需要自己实现相应的Importer和Processor
插一句
Mircosoft.Xna.Framework.Content.Pipeline 是专门用于处理游戏资源的管道,无论是图像还是声音,3D资源或是XML的处理和编译都是在其之下处理编译的。
编译后,任意资源都会被编译成.XNB(XNA二进制文件)。请注意,虽说XNA能同吃Windows和XBox,但其资源文件编译过程是不同的,不可通用,须重新编译。
紧接着,导入图片后,我们可以紧接着LoadContent以及Update和Draw了
Texture2D img;
this.img = this.Content.Load<Texture2D>("old english sheepdog");
其中"old english sheepdog"就是刚才加载的图像的Name属性。
这样,我们便可以直接在Draw方法中,让XNA的每次刷新都画出这样图片了
{
GraphicsDevice.Clear(Color.CornflowerBlue);
spriteBatch.Begin();
spriteBatch.Draw(img, new Rectangle(0, 0, 50, 50), Color.White);
spriteBatch.End();
base.Draw(gameTime);
}
简单解释下以上代码,
GraphicsDevice.Clear(Color.CornflowerBlue);用于擦除当前屏幕内的图像
spriteBatch 通常用于绘制Sprite,即精灵。
请注意,在XNA的一个Game里请避免使用多个 spriteBatch ,并且所有图像的绘制都必须在spriteBatch 的Begin和End之间。
至于 spriteBatch.Draw 具有多个重载, 具体参考
这样,我们第一个图像就诞生了
细心的你发现了吧,游戏界面内没有鼠标光标,那多简单,自己画个。
Point p;
//在Update方法中增加
MouseState ms=Mouse.GetState();
p = new Point(ms.X, ms.Y);
//修改Draw方法
spriteBatch.Draw(img, new Rectangle(p.X, p.Y, 50, 50), Color.White);
这样,鼠标光标,便变成当前图像了。
当然,如果你只需要默认windows鼠标光标作为游戏光标,则不需要这么麻烦
this.IsMouseVisible = true;
即可。
这样,我们第一个XNA程序便完成了。
相关源代码
To Be Continue....
本系列列表
XNA入门教程----(一)
XNA入门教程----(二) 移动控制
XNA入门教程----(三) 简单的动画
转载于:https://www.cnblogs.com/edwin1986/archive/2010/01/15/XNA_1.html
XNA入门教程----(一)相关推荐
- Kafka入门教程与详解
1 Kafka入门教程 1.1 消息队列(Message Queue) Message Queue消息传送系统提供传送服务.消息传送依赖于大量支持组件,这些组件负责处理连接服务.消息的路由和传送.持久 ...
- 【CV】Pytorch一小时入门教程-代码详解
目录 一.关键部分代码分解 1.定义网络 2.损失函数(代价函数) 3.更新权值 二.训练完整的分类器 1.数据处理 2. 训练模型(代码详解) CPU训练 GPU训练 CPU版本与GPU版本代码区别 ...
- python tornado教程_Tornado 简单入门教程(零)——准备工作
前言: 这两天在学着用Python + Tornado +MongoDB来做Web开发(哈哈哈这个词好高端).学的过程中查阅了无数资料,也收获了一些经验,所以希望总结出一份简易入门教程供初学者参考.完 ...
- python向量计算库教程_NumPy库入门教程:基础知识总结
原标题:NumPy库入门教程:基础知识总结 视学算法 | 作者 知乎专栏 | 来源 numpy可以说是 Python运用于人工智能和科学计算的一个重要基础,近段时间恰好学习了numpy,pandas, ...
- mysql query browswer_MySQL数据库新特性之存储过程入门教程
MySQL数据库新特性之存储过程入门教程 在MySQL 5中,终于引入了存储过程这一新特性,这将大大增强MYSQL的数据库处理能力.在本文中将指导读者快速掌握MySQL 5的存储过程的基本知识,带领用 ...
- python tensorflow教程_TensorFlow入门教程TensorFlow 基本使用T
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 TensorFlow入门教程 TensorFlow 基本使用 TensorFlow官方中文教程 TensorFlow 的特点: 使用图 (graph) 来 ...
- air调用java,AIR2.0入门教程:与Java应用交互
在之前的一篇文章中,我介绍了如何使用AIR2.0新增的NativeProcess类与本地进程进行交互和通讯,在那个例子里面我们使用了C++ 的代码,实际上只要是基于命令行的标准输入输出,AIR2.0的 ...
- 【Arduino】开发入门教程【一】什么是Arduino
Arduino Arduino 是一款便捷灵活.方便上手的开源电子原型平台,包含硬件(各种型号的arduino板)和软件(arduino IDE).它适用于艺术家.设计师.爱好者和对于"互动 ...
- python 三分钟入门_Cython 三分钟入门教程
作者:perrygeo 译者:赖勇浩(http://laiyonghao.com) 原文:http://www.perrygeo.net/wordpress/?p=116 我最喜欢的是Python,它 ...
最新文章
- iOS 开发之 pdf 文档的加载与浏览的 4 种方式
- Flex4 Application中与Module通信
- 详解Linux交互式shell脚本中创建对话框实例教程
- html页面右侧滚动,HTML5页面点击和左右滑动页面滚动
- hihoCoder #1468 : 2-SAT·hihoCoder新春晚会(2-SAT 输出字典序最小的方案)
- Linux学习笔记:安装python
- android的热点分配ip_Android 得到连接热点的ip的方法
- P3370-[模板]字符串哈希【hash】
- JavaScript从入门到放弃 -(六)正则表达式
- VS调试提示无可用源。
- netstat -an|awk '/^tcp/ {++s[$NF]} END {for( a in s) {print a,s[a]}}'
- Atitit mybatis缓存遇到的问题与解决 1.1. 只有getobj 没有执行putobject	1 1.2. 默认所有的select要读取缓存怎么办。。执行过滤 可以自己定义个白名单。
- IDEA 如何根据代码自动生成类图
- 机器学习和人工智能之间的区别
- python扫雷游戏代码_基于Python实现的扫雷游戏实例代码
- Monorepo 項目管理方案:lerna + yarn workspace / pnpm
- NASA官网信息导航(愚见)
- veracrypt取消加密卷_VeraCrypt如何创建文件型加密卷?保护文件资料安全
- 美元指数升至七周高点 短期仍有上涨动能
- 一般人不清楚的JavaScript概念