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

推荐一款基于XNA的开源游戏引擎《Engine Nine》 一、前沿导读 XNA是微软基于.Net部署的下一代3D/2D游戏开发框架,其实XNA严格来说类似下一代的DirectX,当然不是说XNA会取代DirectX,但是基于XNA我们对于面向XBOX360,WP等系列其他平台的移植成本非常的低(据说基于MONO在linux下XNA也可以运行3D DEMO,有试过的请点意见)。 但是基于XNA的复杂程度我们自然也是可想而知的,所以在这里推荐第一款基于X 阅读详情
 

写在前面:

前阵子看到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程序

 安装完XNA Framework后,在VS中即出现XNA的相关项目Template. 我们随便创建一个名曰 WindowsGame1的XNA项目。

编译后,出现蓝天白云一片
 

 现在,我们开始尝试在蓝天白云中,增加一些我们自己的元素。

插一句 

习惯于windows编程的朋友往往比较习惯对事件的监听或触发。其实,windows本身是基于消息队列的,事件就是不断监听消息并做出相应的处理。 不熟悉的朋友可以在dotnet winForm中重载WndProc即可知晓。

 在每个游戏中,都存在消息循环,即不断计算和控制界面不断刷新的循环。XNA也不例外,其Microsoft.Xna.Framework.Game以及我们以后说到的GameComponent都存在着自己的消息循环。

其中,

Initialize用于对游戏界面内一些对象的初始化。

LoadContent用于加载游戏内的一些资源,如图像,文件,声音等。

紧接着,Update和Draw 便开始游戏内的消息循环,前者主要用于相关计算,后者用于绘制。

XNA的默认刷新率是60fps(Frame/Second) 

 

我们首先在Content Directory下添加一张一存在的图片old english sheepdog.png 将其Content Importer和Processor 改为Texture - XNA Framework

请注意,XNA源生的API不支持GIF,如果需要导入则需要自己实现相应的Importer和Processor 

插一句

 Mircosoft.Xna.Framework.Content.Pipeline 是专门用于处理游戏资源的管道,无论是图像还是声音,3D资源或是XML的处理和编译都是在其之下处理编译的。

 编译后,任意资源都会被编译成.XNB(XNA二进制文件)。请注意,虽说XNA能同吃Windows和XBox,但其资源文件编译过程是不同的,不可通用,须重新编译。 

 

紧接着,导入图片后,我们可以紧接着LoadContent以及Update和Draw了

 

<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--> // 新建变量img;用于存储图像
Texture2D img;

 

<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--> // 在LoadContent中增加
  this .img  =   this .Content.Load < Texture2D > ( " old english sheepdog " );

 

 其中"old english sheepdog"就是刚才加载的图像的Name属性。

这样,我们便可以直接在Draw方法中,让XNA的每次刷新都画出这样图片了 

代码
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->          protected   override   void  Draw(GameTime gameTime)
        {
            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 具有多个重载, 具体参考

 

 这样,我们第一个图像就诞生了

 

细心的你发现了吧,游戏界面内没有鼠标光标,那多简单,自己画个。

<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--> // 声明全局变量p
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鼠标光标作为游戏光标,则不需要这么麻烦

<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--> // 在Initialize中
  this .IsMouseVisible  =   true ;

 即可。

 

这样,我们第一个XNA程序便完成了。

 相关源代码

 To Be Continue....

 

转自http://www.cnblogs.com/edwin1986/archive/2010/01/15/XNA_1.html

XNA教程(一) 作者:Mike Fleishauer & clayman本文版权归原作者所有,仅供个人学习使用,请勿转载,勿用于任何商业用途。由于本人水平有限,难免出错,不清楚的地方请大家以原著为准。欢迎大家和我多多交流。Blog:http://blog.youkuaiyun.com/soilworkclayman_joe@yahoo.com.cn  special thanks to Mike Fleishauer ^_^ 阅读详情

相关推荐

【用C#写游戏-XNA游戏编程】坦克大战(一) 初探XNA

从初涉编程到学习C#也一年有余了,从今天开始就借一个《坦克大战》来对自己以前学过的知识进行一次汇总和尝试开始写博客,好了,废话不多说,开篇。     XNA中的X表示能够在WindowsXbox和合作伙伴之间达到跨平台的强大的软件工具。N表示“下一代(Next-generation)”,A表示“架构(Architecture)”。XNA是基于DirectX的游戏开发环境,是微软对于 Ma

菜鸟的腾飞之路 7929

使用.NET和XNA Game Studio Express开发杀手级游戏

【原文地址】 Building killer Games using .NET and XNA Game Studio Express 【原文发表日期】 Tuesday, December 19, 2006 12:36 AM 万一你错过了,微软上个星期发布了 XNA Game Studio Express 1.0 。XNA提供了一个基于.NET 的丰富的开发游戏的框架,支持使用C#和Visua

Scott Guthrie博客中文版 1万+

XNA安装指导

XNA中的X表示能够在WindowsXbox和合作伙伴之间达到跨平台的强大的软件工具。N表示“下一代(Next-generation)”,A表示“架构(Architecture)”。XNA是基于DirectX的游戏开发环境,是微软对于 Managed DirectX 的修正及扩充版本。 本系列文章主要参考的是Learning.XNA.4.0,作者为Aron Reed,下面是书籍下载链接:

Ederick的专栏 3160

XNA游戏开发之2D游戏

摘要:以XNA为基础的游戏可以利用3D模型为游戏加入动画效果,也可以利用简单的程序技巧将2维图片显示成动画。虽然2维动画相对3维动画来说简单一些,但是制作出来的游戏其趣味性和挑战性也绝不逊色。今天我们就一块学习一下在使用XNA Framework开发2D游戏时的一些基础知识和注意事项。 主要内容: 1.2D游戏动画的基本原理 2.动画素材的准备 3.一个简单的2D动画 一、2D游戏动画的基本原理 在XNA中制作2D动画的过程很像翻卡通小人书,首先绘制好各种角色造型,然后以固定的时间间隔来显示不同

august5291的博客 3562

Intouch间接变量(扩展)

间接变量只是Intouch提供给开发者的便捷方式之一,并不是所有情况都一定要使用间接变量,有时候用条件语句或者内存变量的方式也能起到类似的作用。

weixin_41571357的博客 2168

从OSGB到3DTiles:倾斜摄影数据高效转换实战指南

本文提供了将倾斜摄影OSGB数据高效转换为Web友好的3DTiles格式的完整实战指南。详细介绍了使用开源工具进行转换的步骤,包括环境搭建、核心命令、参数调优及在Cesium中加载与问题排查,旨在帮助GIS开发者和三维应用工程师打通数据到Web展示的最后一公里,实现大规模三维模型的流畅网络发布。

u0v1w2x3的博客 570

XNA入门教程(一)

何谓XNA:XNA Framework 是建置于 .NET Framework 2.0上,另外还加入了一些专注于游戏开发上类别库,在指定的平台上使程式码重用达之最大效果。XNA Framework 在一个特别为有管理式游戏运行的通用语言执行层(Common Language Runtime)版本上运行。这个执行层支援Windows XP、Windows Vista和XBox 3...

banshu2416的博客 856

使用DevExpress22.X(Patch)控件库在VisualStudio2022使用C#进行Winform、WPF应用的开发,看这一篇就够了!

写在开头,Dev Express是个十分强大的控件库(下文简称Dev),但碍于其高昂的使用费用,“出于学习目的”,我们一般使用的都是Patch版本(在版权意识日趋加强的当下,不要提那两个字,现在加上那些字,百度都搜不出内容)。

平凡之路 2万+

xna介绍

xna简介: 微软的XNA Frame是明年主推的下一代的游戏开发工具,C#的爱好者们有福了,开发自己的游戏节目,振兴国产游戏,有兴趣的继续向下看!! XNA简介:首先声明,XNA不是游戏引擎,它只是一个游戏开发框架。原来 C# 开发游戏都是使用 Managed DirectX,可惜的是微软已经停止了它的开发,而取而代之的是 XNA。XNA 的目标是用 C# 在 .Net Framework 

shuanghusun的专栏 5376

【TC3xx芯片】TC3xx芯片看门狗复位的默认行为分析

TC3xx芯片看门狗复位的默认行为分析

qq_36056498的博客 350

基于STM32设计的校园智慧路灯系统(华为云IOT)(212)

当前设计并研发了基于STM32的智慧路灯系统,本系统的目的是打造一个高效节能、智能化管理的校园照明环境。通过集成STM32F103RCT6高性能微控制器为核心,结合多种传感器模块如BH1750光敏传感器、热释电人体感应模块以及中科微电子GPS模块等,实现了对校园路灯的精准控制与实时监控。

5137

XNA框架基础——XNA介绍

第1章:XNA介绍 欢迎来到XNA的世界。作为一个游戏程序员,你或许知道 DirectX ,甚至也许具有XNA 框架的基础知识。 这一个章节解释了如何安装 XNA Game Studio Express 和如何以有效率的方式使用它。它也包含相当多的技巧,这些技巧甚至可能对任何一个已经知道基础知识的人都有用。 在下面一些章节中,你将直接地开始开发一些很酷的小游戏。 这部分包含基本的功能和在这...

weixin_30446613的博客 1788

黑猫带你学UFS协议第12篇:UFS标志(Flags)和属性(Atrributes)详解

UFS中的标志其实就是一些开关,布尔型,非0即1,打开或者关闭。这些标志可以用来使能或者禁止UFS设备的一些功能、模式或者状态。 简单来说,flag和attribute、discriptor一样,都是ufs的寄存器罢了。只不过spec将这些寄存器分类了,分成这三种大的类型了而已。 标志可以被清除、复位、设置、触发、读。 主机也是通过设备管理器的Query Request UPIU来读取或者写标志。

黑猫奥利奥的博客 2083

XNA简介

Normal07.8 磅02falsefalsefalseMicrosoftInternetExplorer4<objectclassid="clsid:38481807-CA0E-42D2-BF39-B33AF135CC4D" id=ieooui>

JonnyWei的专栏 3463

论文阅读:Universal and Transferable Adversarial Attacks on Aligned Language Models. LLM Attacks

因为“即开即用”的大型语言模型能够生成大量令人反感的内容,近期的工作集中在对这些模型进行对齐,以防止不受欢迎的生成。尽管在规避这些措施方面取得了一些成功——即所谓的针对大型语言模型(LLMs)的“越狱”——这些攻击需要大量的人类智慧,并且在实践中很脆弱。自动对抗性提示生成的尝试也取得了有限的成功。在本文中,我们提出了一种简单有效的攻击方法,可以导致对齐的语言模型生成令人反感的行为。

CSPhD-winston的博客 1416

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

XNA.js 开源项目快速入门教程

XNA.js 开源项目快速入门教程 XNA.js 是一个受到 XNA 库启发的 WebGL 框架,旨在简化使用 JavaScript 进行游戏开发的过程。本教程将引导您了解项目的基本结构、启动文件以及关键配置文件,以便您可以快速上手并开始利用这个强大的框架进行游戏开发。 1. 项目目录结构及介绍 XNA.js 的项目结构设计得既清晰又直观,便于开发者快速定位所需文件。以下是核心的目录结构及其简要说...

gitblog_00998的博客 300

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

XNA带来什么

 XNA提出的目标是:“XNA enables studios and publishers to develop better games, more effectively, on all platforms.” XNA提出的目标是非常大的,个人认为其中的两个重点是:1. more effectively,从目前得到的资料看主要包括游戏内容辅助工具和代码frame work两个方面。2. on

燕良@游戏开发 2541

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

一些有用的xna站点

XNA team members blogs:DavidWeller (LetsKillDave)Shawn Hargreaves BlogCornflower BlueManders vs. MachineDeans XNA BlogGraphics StreamTom Millers BlogMichael Kluchers XNA BlogMitch WalkerXNA Team B

Clayman的专栏 3493

XNA、FNA以及在VS2017中编写XNA

XNA是早期DX SDK支持的C#游戏开发环境,虽然现游戏开发大多是以Unity3D,Unreal 4为主,但是许多独立游戏开发者,特别是2D游戏,依然使用XNA进行开发, 纠其原因,猜测是C#开源且有了跨平台实现。 这可以从许多独立游戏的Switch移植版看出端倪,使用XNA开发游戏依然有一定的优势。 首先是在VS2017中编写XNA,配置见这篇文章。 http://flatred...

weixin_34319374的博客 879

《XNA游戏开发》简介

一、XNA简介 XNA是基于DirectX的游戏开发环境。 以C# 为开发语言 以 .NET Framework 为基础、并加入游戏应用所需之函式库所构成的 XNA Framework 可开发XNA for Windows Phone游戏,Xbox游戏,PC游戏等。

张剑的专栏 1万+

XNA4.0学习笔记1:XNA解析及精灵动画

XNA框架及精灵动画          XNA是微软开发的一款用于window,xbox,windows phone等设备上的游戏开发框架,他的特点是方便快捷的开发游戏,提供给我们很多的游戏开发套件,摒弃了传统的游戏引擎多文件多目录的繁琐,使我们用起来容易上手,在wp8 SDK发布之后,目前微软已经表示wp8不再支持用XNA开发游戏,但是会完全兼容XNA游戏,所以XNA游戏还是可以在这些平台上运

K神丶的专栏 3616

微软宣布将推出XNA Game Studio

微软宣布将推出XNA Game Studio微软宣布将推出可以开发Windows及XBOX 360的XNA Game Studio开发工具,以后你也可以自己在家开发电玩了...   XNA Game Studio是专门用于开发Game电玩的开发工具,而最大的特色是可以用.NET Managed Code来进行开发,例如使用C#来开发电玩。  而更棒的是微软将推出免费的XNA

DotNet开发圣殿(简体) 1887
上一篇: ASCII码表
下一篇: XNA入门教程----(二) 移动控制
learneryql
博客等级 码龄16年 1粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值