AppleSeeker's Tech Blog
Welcome to AppleSeeker's space

随笔分类 -  XNA

1
XNA游戏开发——播放音效(2)
摘要:上一篇文章已讲述了,如何简单的添加及播放音效,本篇文章将讲述音效实例。音效实例调用在SoundEffect对象的Play方法,提供简单的方法来播放声音,在很多情况下将会很充足。对于枪声,爆炸声,玩家成功的声音和其它各种各样的效果,这很可能都是你所需要的。然而,在其它地方,你可能发现需要很高的控制才能超过你播放的声音。循环播放声音的能力,举例,是非常有用的,但仅由SoundEffect类提供的功能不能提供这种能力。主要的原因是我们将没有办法去阻止声音;我们不能获得一个声音ID或任何类似的值,所以一旦激活一些声音后,我们将不能告诉类哪一个应该停止播放。在SoundEffectInstance类中可 阅读全文
posted @ 2012-07-12 10:02 AppleSeeker(冯峰) 阅读(1885) 评论(0) 推荐(3)
XNA游戏开发——播放音效(1)
摘要:XNA提供一个相当灵活的方式在你的游戏中来播放音效。它可以同时播放多个声音(包括相同音效实例)以及提供控制音量等级,立体声像和音调转换。它可以循环播放或播放它们一次,同时也提供控制来允许声音暂停或恢复播放。向项目中添加音效音效作为工程内容的一部分来创建,已与所有在前一个章节中我们使用的其它资源数据一样(纹理和精灵文字)。它们使用相同方法添加进来:通过右键在解决方案浏览器中的主工程内容节点,然后选择“Add / Existing Item”。声音文件可以找到并添加到工程中。在添加一个声音文件后,你将能看到,内容项目的Content Importer属性设置为WAV Audio File,Cont 阅读全文
posted @ 2012-07-10 14:23 AppleSeeker(冯峰) 阅读(1748) 评论(3) 推荐(2)
公告板
摘要:公告板是简单的四边形(平滑,平面或矩形的纹理对象),在游戏世界中渲染,所以它们直接面对相机。当相机围绕世界移动时,公告板对象旋转以便它们持续直接面对相机。不同于粒子系统,公告板有大量潜在的用途,包括渲染围绕光照的明亮光点的镜头光晕和使用2D图片渲染的基础树,如此,它们总是面对相机出现。对于很多类型的渲染对象,适用于公告板的这种方式将给予深度外观,即使对象实际上是完全平滑的。举例,想象下你想在你的游戏中去渲染没有纹理,未点亮的特殊对象。这样一个球体看上去正好和所有角度相同,所以如果你可以简化渲染一个平滑的球体绘制并保持它直接面对相机的角度,它将无法区分实际的球体,但需要相当少的计算能力来显示它。 阅读全文
posted @ 2012-07-09 13:57 AppleSeeker(冯峰) 阅读(1492) 评论(0) 推荐(0)
粒子系统介绍
摘要:另一个有用的技术,许多游戏将从粒子系统使用中受益,它是小的,平滑的,在场景中使用透明来绘制来创建可以在你的游戏世界中添加大量气氛的各种效果的的纹理三角形。粒子系统添加到游戏中,就像任何其它对象那样,但有下列特征:1)它们经常使用一个称为公告板的技术来确定它们的方向以便它们直接面对相机。2)它们通常关闭写入深度缓冲以便它们不会封闭另一个。3)它们往往最后去渲染到每一次场景更新中。因为它们不会更新深度缓冲,渲染顺序防止在它们之后的对象出现在它们前面。4)它们差不多总是添加到一个组中而不是单独的。 阅读全文
posted @ 2012-07-06 13:50 AppleSeeker(冯峰) 阅读(496) 评论(0) 推荐(0)
在游戏框架中实现天空体
摘要:为了尽量让使用天空体容易,我们将在游戏框架中整合一个特殊的天空体对象,允许我们来确保它是在场景中的任何内容的之前渲染。天空体创建一个新的游戏框架类:MatrixSkyboxObject。该类继承于MatrixObjectBase,它所对应的继承关系如图所示。在类中,为了天空体能包含立方体的4个面(包括顶部和底部面),代码创建一个顶点缓冲,所有面都朝向内部。它们使用纹理坐标来配置,在盒子内部围绕所提供的纹理。在天空体类的Update方法中,相机坐标通过读取它的Transformation.Translation属性来取得,并设置为天空体得自己的坐标。这样做确保天空体总是在相机中出现相同距离,无论 阅读全文
posted @ 2012-07-05 13:45 AppleSeeker(冯峰) 阅读(749) 评论(0) 推荐(0)
创建天空体
摘要:天空体实际上作为一个立方管实现;它没有顶部或底部面。这大大简化为天空体创建图形的任务。用这种方式使用管子的效果已经隐藏在天空体的顶部,通过确保天空纹理的顶部边缘和场景的背景色有相同的颜色,使得在天空体终点处和背景的开始处很难看到它,除非它是直接看到的。在底部边缘,我们确保足够的面来绘制来隐藏纹理较低边缘。相反,它简单的消失在场景内容背后。如果你正在创建游戏,需要能够环顾立方体,包括向上和向下,你需要增强它来创建完全的立方体代替目前使用的管的形状。这是简单的问题,在天空体的顶部和底部添加2个额外的面,都指向里面。产生天空体图片可以是一个挑战的事,取决于哪类环境你所需要的。一个选择是去自己创建背景 阅读全文
posted @ 2012-07-03 13:40 AppleSeeker(冯峰) 阅读(488) 评论(0) 推荐(0)
天空体介绍
摘要:我们的3D世界通常开始时看上去的感觉是非常复杂的,但它们目前都有一个很明显的缺点:它们都被一个空白的背景所提供。我们为我们的精灵工程创建一个背景图片,通过在渲染精灵前,先简单用绘制一个屏幕大小的图片。这个工作在2D中是很好完成的,但在3D中它就会崩溃:随着相机移动,背景也必须跟着移动,我们不能让这个发生在一个静态的图片中。这有多种方法,我们可以采取工作的3D背景来实现,这里你所看到的称为天空体。之所以这么称呼,因为它实现效果是一个盒子(一个立方体),放置在相机中。相机在集中在盒子里,并且它的角度变化为看到的围绕的场景,它也环顾四周的天空体。结果是现实的外观背景移动与在场景中的相机和对象一致的。 阅读全文
posted @ 2012-06-25 13:37 AppleSeeker(冯峰) 阅读(708) 评论(0) 推荐(0)
添加雾化效果
摘要:XNA提供了一个有用的功能是能够在渲染场景中添加雾化效果,它提供简单的模仿真实世界中的雾,让对象逐渐远离相机知道看不到它们。显然,Windows Phone 7设备可以渲染到屏幕上,有大量内容是被限制的,如果你已打开环境延伸到远方,在某个阶段你必须绘制一条线,并告诉XNA不会去绘制任何较远的东西。这个距离限制对于剪辑平面通常通过设置一个适当的值来达到,当设置投影矩阵,如我们在第7章节所讨论的那样。缺点是,当对象到达剪辑平面,它们明显消失了。它们通常留下它们的一部分任然可见,当他们的边缘穿过剪辑平面,会导致一个非常不自然的场景。在它们消失之前,你可以使用雾化效果通过允许它们逐步消失来帮助减少消失 阅读全文
posted @ 2012-06-17 13:33 AppleSeeker(冯峰) 阅读(1021) 评论(0) 推荐(0)
使用追踪相机
摘要:现在你已准备好去飞行,那让我们做一些过去小的游戏的变化,然后看看它的外观。ResetGame方法创建纸飞机对象并存储它到一个称为_plane类级变量中,为了以后能方便的访问。创建相机后,在初始化后,是没有追踪对象的。因此,相机位置服从手动提供的转换而不是跟随飞机。当工程运行后,初始化配置就出现了。房屋和飞机是可见的,但相机缓慢围绕场景。在游戏的CameraObject.Update函数中使用简单的旋转和转化矩阵来处理相机移动路径。当玩家轻拍下屏幕,然而,我们激活了追踪摄像机。游戏类的Update方法中检查屏幕的轻拍,每一次发现,它都将增加下一次的4个相机配置。以下代码将描述如何激活追踪相机。/ 阅读全文
posted @ 2012-06-09 11:48 AppleSeeker(冯峰) 阅读(691) 评论(0) 推荐(0)
实现追踪摄像机
摘要:为了允许游戏可以简单的使用追踪摄像机,我们将添加一个新的属性给MatrixCameraObject类,它可以放置目标对象的一个引用。如果这个属性,命名为ChaseObject,默认值为null,相机将完全像以前那样,仅按照它的位置和LookAtTarget坐标放置它本身。如果提供了游戏对象,然而,相机的行为将改变以便它围绕场景来跟随对象。当操作视角设置模式时,相机有2个责任它必须实现每一个它的Update方法:它必须放置它本身在目标对象后面,并且它必须直接看到目标对象。让我们看下它是如何实现的。首先,Update代码检查看下是否提供ChaseObject。如果不是,它申请默认的对象转换,不做任 阅读全文
posted @ 2012-06-01 11:44 AppleSeeker(冯峰) 阅读(780) 评论(0) 推荐(0)
创建一个追踪摄像机(2)
摘要:为了生成曲线,函数需要通过4个在沿着重量值在0和1之间的路径上连贯的位置。由于重量在这些2个值之间增加,曲线返回在更远的路径上的坐标。当所提供的重量值为0,曲线将返回正确的坐标在第二个输入坐标。当所提供的重量值为1,曲线将返回一个准确的坐标在第三个输入位置。然而,所有4个值在这些计算中来使用, 来确保在第二个和第三个位置之间的平滑路径,并同样向前进到下一组运行点。这个可以使用图表来举例说明,在图所示。如果使用点0,1,2和3来计算曲线,重量在0.0,由此产生的位置会是1。如果重量增加到1.0,曲线坐标轨迹将沿着在点1和点2之间的线,当重量到达1.0,将到达点2。注意,从这个点的,曲线坐标没有返 阅读全文
posted @ 2012-05-24 11:37 AppleSeeker(冯峰) 阅读(358) 评论(0) 推荐(0)
创建一个追踪摄像机(1)
摘要:创建一个追踪摄像机(1) 阅读全文
posted @ 2012-05-16 11:31 AppleSeeker(冯峰) 阅读(442) 评论(0) 推荐(0)
相机定位
摘要:虽然我们有一个清晰地良好的控制相机,简单的通过设置它的位置和LookAtTarget,这里有另一个相机定位机制,我们可以利用它将在一些状况中提供一个更简单的方法来将相机放到我们想它放置的地点。这个机制就是使用我们已经为我们的游戏对象所使用的矩阵转换方法。如果我们使用矩阵转换,我们可以再一次提供一系列操作,相机将坚持决定它的最终位置。举例,我们可以在场景中决定去转换相机到一个不同的位置,围绕y轴预先的角度,旋转相机的矩阵,随着旋转角度的改变,相机将围绕着在首先转换的定义的坐标旋转。在相机的循环路径上,这是计算方法要比使用三角法去计算更简单, 如果我们简单的设置它坐标矢量。下面代码显示了一个使用技 阅读全文
posted @ 2012-05-08 10:52 AppleSeeker(冯峰) 阅读(1985) 评论(0) 推荐(0)
XNA——相机类
摘要:在某些方面,它与一般的游戏对象相似,我们可以在我们的场景中使用:它是一个转换矩阵,有一个坐标,可以使用矩阵转换函数来转换。出于这个原因,我们将实现相机类,从MatrixObjectBase中派生,命名为MatrixCameraObject。这个类是具体的(非抽象类),并可以直接使用,不必继承更远的类。相机类的坐标在类继承关系上可以在图中看到。然而,在相机和标准游戏对象中有一些明显的不同:1)在任何时间,游戏中仅可以只有一个活动的相机。2)相机不会做任何绘制,虽然它们任然可以像其它任何普通游戏对象那样,更新它们的坐标。3)相机坐标更新和应用的顺序在3D场景中是有意义的:如果它的坐标通过一组对象改 阅读全文
posted @ 2012-04-30 10:45 AppleSeeker(冯峰) 阅读(389) 评论(0) 推荐(0)
XNA——使用摄像机
摘要:如果你曾经用过一个摄像机,你所知道的最具动态的场景将在场景中有一个移动,不论是相机还是演员。在许多游戏中,操作相机的能力也同样重要。移动相机来改变玩家在3D世界中看到的位置。相机使用View效果属性来实现的,并且我们其实一直在使用它,尽管在所有我们的3D示例工程中没有移动它。在某些方面,有摄像头似乎不是很必要。毕竟,这似乎没有任何视觉上的不同在朝对象移动相机和朝相机移动对象。一旦我们开始构建复杂的有光照的多对象场景,然而,它变得非常方便来计算对象和光照坐标,而不必担心全部移动他们来模拟摄像头移动。摄像机位置和方向为了移动相机,我们必须去弄清楚如何设置视角矩阵所需要的摄像机坐标。幸运的是,XNA 阅读全文
posted @ 2012-04-21 10:41 AppleSeeker(冯峰) 阅读(708) 评论(0) 推荐(0)
在游戏框架中添加支持
摘要:正如我们所工作所使用的其它内容资源,通过允许它们加载到游戏框架中,我们将简化模型工作任务。这些模型会添加到GameHost类,作为一个模型对象字典。通过游戏的LoadContent方法,所有我们所需要的模型可以因此加载到字典中,当它们必须在屏幕上绘制时,就准备好进入字典了。就游戏框架而言,我们可以离开,但通过添加另一个抽象基类所构建的渲染模型的目的,我们可以让我们的生活容易点。这个类称为MatrixModelObject并且来自于MatrixObjectBase类,如图所示。从MatrixObjectBase类继承,意味着我们马上可以获得所有的矩阵-基础渲染属性,基于这些我们可以添加一些更多属 阅读全文
posted @ 2012-04-13 10:35 AppleSeeker(冯峰) 阅读(344) 评论(0) 推荐(0)
渲染已保存的几何图形
摘要:模型对象最终包含一系列VertexBuffer和IndexBuffer对象,这些我们将使用它们在屏幕上绘制对象。和从最后一章节的简单立方体示例不同,然而,它很可能该模型将包含多套三角形,所有这些三角形必须要在一起绘制来形成完整的对象。出于这个原因,模型对象包含一个集合的层次结构,正如图所示,必须为了获得绘制顶点数据。包含的模型对象由一个Meshes属性,它提供一个关于ModelMesh对象的集合。每一个ModelMesh代表一组呈现在一个在对象位置的三角形。有多个模型网格对象的原因是,模型对象能够存储包含部分复杂阶层的几何学。想象一下,例如,你想去渲染一个直升机模型。这里有直升机模型的3个主要 阅读全文
posted @ 2012-04-05 10:30 AppleSeeker(冯峰) 阅读(448) 评论(0) 推荐(0)
将已保存的几何图形导入到XNA项目中
摘要:在游戏中添加已保存的对象到工程里来使用是非常容易的:简单的添加.x文件到你的工程中,就像你工程中的其它资源文件那样。仅添加.x文件,这不需要添加任何纹理来使用。提示:如果你想在工程中添加纹理,你可以在解决方案浏览器中看到它们,将它们添加进去然后在属性窗口中设置它们生成行为属性为None。.x模型的内容处理器属性包含一些有用的选项,在使用你对象前,你可能想去配置,如图所示。当工程编译时,Visual Studio将.x文件转换成在渲染时更简单使用的格式,在此阶段它能执行基础的对象几何体的转换。这些属性中第一个就是比例。对象中非常常用的,用来创建完全不同的几何体比例,它可以结束整个错误尺寸的对象。 阅读全文
posted @ 2012-03-28 10:12 AppleSeeker(冯峰) 阅读(381) 评论(0) 推荐(0)
导出3D几何体
摘要:当涉及到导出对象时,SketchUp免费版有很大的限制选项。支持2个原生格式是Collada (.dae)文件和Google地球(.kmz)文件。我们可以编写代码来导入这些格式到我们的XNA游戏中,但一个更好的解决方案是找到一个方法来创建.x几何体文件。.x几何体文件格式是多年前就作为微软的DirectX的一部分,持续在DirectX和XNA中支持到现在。XNA本身支持渲染.x文件,就像它支持图片和声音文件那样,实际上提供非常简单使用的编程接口,允许我们保存工作中所用到的大量的阅读和处理的几何体文件。不幸的是,无论是SketchUp免费版还是SketchUp加强版都不支持这个文件格式。在互联网 阅读全文
posted @ 2012-03-20 10:07 AppleSeeker(冯峰) 阅读(541) 评论(0) 推荐(0)
导入几何图形——SketchUp介绍
摘要:导入几何图形--SketchUp介绍 阅读全文
posted @ 2012-03-12 16:14 AppleSeeker(冯峰) 阅读(975) 评论(0) 推荐(0)

1