AppleSeeker's Tech Blog
Welcome to AppleSeeker's space
posts - 104,  comments - 773,  trackbacks - 6
摘要: 自今日起,我的技术文章将首发至个人Blog站点。在Cnblogs中将有一定时间的延迟更新,希望大家去我的Blog站点访问。万分感谢~个人Blog站点:http://www.gordonspace.net冯峰2009-10-28阅读全文
posted @ 2009-10-28 13:21 AppleSeeker(冯峰) 阅读(560) 评论(0) 编辑
摘要: 移动开发索引贴阅读全文
posted @ 2008-04-06 10:52 AppleSeeker(冯峰) 阅读(3505) 评论(17) 编辑
摘要: 上一篇文章已讲述了,如何简单的添加及播放音效,本篇文章将讲述音效实例。音效实例调用在SoundEffect对象的Play方法,提供简单的方法来播放声音,在很多情况下将会很充足。对于枪声,爆炸声,玩家成功的声音和其它各种各样的效果,这很可能都是你所需要的。然而,在其它地方,你可能发现需要很高的控制才能超过你播放的声音。循环播放声音的能力,举例,是非常有用的,但仅由SoundEffect类提供的功能不能提供这种能力。主要的原因是我们将没有办法去阻止声音;我们不能获得一个声音ID或任何类似的值,所以一旦激活一些声音后,我们将不能告诉类哪一个应该停止播放。在SoundEffectInstance类中可阅读全文
posted @ 2012-07-12 10:02 AppleSeeker(冯峰) 阅读(1414) 评论(0) 编辑
摘要: XNA提供一个相当灵活的方式在你的游戏中来播放音效。它可以同时播放多个声音(包括相同音效实例)以及提供控制音量等级,立体声像和音调转换。它可以循环播放或播放它们一次,同时也提供控制来允许声音暂停或恢复播放。向项目中添加音效音效作为工程内容的一部分来创建,已与所有在前一个章节中我们使用的其它资源数据一样(纹理和精灵文字)。它们使用相同方法添加进来:通过右键在解决方案浏览器中的主工程内容节点,然后选择“Add / Existing Item”。声音文件可以找到并添加到工程中。在添加一个声音文件后,你将能看到,内容项目的Content Importer属性设置为WAV Audio File,Cont阅读全文
posted @ 2012-07-10 14:23 AppleSeeker(冯峰) 阅读(1314) 评论(3) 编辑
摘要: 公告板是简单的四边形(平滑,平面或矩形的纹理对象),在游戏世界中渲染,所以它们直接面对相机。当相机围绕世界移动时,公告板对象旋转以便它们持续直接面对相机。不同于粒子系统,公告板有大量潜在的用途,包括渲染围绕光照的明亮光点的镜头光晕和使用2D图片渲染的基础树,如此,它们总是面对相机出现。对于很多类型的渲染对象,适用于公告板的这种方式将给予深度外观,即使对象实际上是完全平滑的。举例,想象下你想在你的游戏中去渲染没有纹理,未点亮的特殊对象。这样一个球体看上去正好和所有角度相同,所以如果你可以简化渲染一个平滑的球体绘制并保持它直接面对相机的角度,它将无法区分实际的球体,但需要相当少的计算能力来显示它。阅读全文
posted @ 2012-07-09 13:57 AppleSeeker(冯峰) 阅读(952) 评论(0) 编辑
摘要: 另一个有用的技术,许多游戏将从粒子系统使用中受益,它是小的,平滑的,在场景中使用透明来绘制来创建可以在你的游戏世界中添加大量气氛的各种效果的的纹理三角形。粒子系统添加到游戏中,就像任何其它对象那样,但有下列特征:1)它们经常使用一个称为公告板的技术来确定它们的方向以便它们直接面对相机。2)它们通常关闭写入深度缓冲以便它们不会封闭另一个。3)它们往往最后去渲染到每一次场景更新中。因为它们不会更新深度缓冲,渲染顺序防止在它们之后的对象出现在它们前面。4)它们差不多总是添加到一个组中而不是单独的。阅读全文
posted @ 2012-07-06 13:50 AppleSeeker(冯峰) 阅读(199) 评论(0) 编辑
摘要: 为了尽量让使用天空体容易,我们将在游戏框架中整合一个特殊的天空体对象,允许我们来确保它是在场景中的任何内容的之前渲染。天空体创建一个新的游戏框架类:MatrixSkyboxObject。该类继承于MatrixObjectBase,它所对应的继承关系如图所示。在类中,为了天空体能包含立方体的4个面(包括顶部和底部面),代码创建一个顶点缓冲,所有面都朝向内部。它们使用纹理坐标来配置,在盒子内部围绕所提供的纹理。在天空体类的Update方法中,相机坐标通过读取它的Transformation.Translation属性来取得,并设置为天空体得自己的坐标。这样做确保天空体总是在相机中出现相同距离,无论阅读全文
posted @ 2012-07-05 13:45 AppleSeeker(冯峰) 阅读(359) 评论(0) 编辑
摘要: 天空体实际上作为一个立方管实现;它没有顶部或底部面。这大大简化为天空体创建图形的任务。用这种方式使用管子的效果已经隐藏在天空体的顶部,通过确保天空纹理的顶部边缘和场景的背景色有相同的颜色,使得在天空体终点处和背景的开始处很难看到它,除非它是直接看到的。在底部边缘,我们确保足够的面来绘制来隐藏纹理较低边缘。相反,它简单的消失在场景内容背后。如果你正在创建游戏,需要能够环顾立方体,包括向上和向下,你需要增强它来创建完全的立方体代替目前使用的管的形状。这是简单的问题,在天空体的顶部和底部添加2个额外的面,都指向里面。产生天空体图片可以是一个挑战的事,取决于哪类环境你所需要的。一个选择是去自己创建背景阅读全文
posted @ 2012-07-03 13:40 AppleSeeker(冯峰) 阅读(221) 评论(0) 编辑
摘要: 我们的3D世界通常开始时看上去的感觉是非常复杂的,但它们目前都有一个很明显的缺点:它们都被一个空白的背景所提供。我们为我们的精灵工程创建一个背景图片,通过在渲染精灵前,先简单用绘制一个屏幕大小的图片。这个工作在2D中是很好完成的,但在3D中它就会崩溃:随着相机移动,背景也必须跟着移动,我们不能让这个发生在一个静态的图片中。这有多种方法,我们可以采取工作的3D背景来实现,这里你所看到的称为天空体。之所以这么称呼,因为它实现效果是一个盒子(一个立方体),放置在相机中。相机在集中在盒子里,并且它的角度变化为看到的围绕的场景,它也环顾四周的天空体。结果是现实的外观背景移动与在场景中的相机和对象一致的。阅读全文
posted @ 2012-06-25 13:37 AppleSeeker(冯峰) 阅读(325) 评论(0) 编辑
摘要: XNA提供了一个有用的功能是能够在渲染场景中添加雾化效果,它提供简单的模仿真实世界中的雾,让对象逐渐远离相机知道看不到它们。显然,Windows Phone 7设备可以渲染到屏幕上,有大量内容是被限制的,如果你已打开环境延伸到远方,在某个阶段你必须绘制一条线,并告诉XNA不会去绘制任何较远的东西。这个距离限制对于剪辑平面通常通过设置一个适当的值来达到,当设置投影矩阵,如我们在第7章节所讨论的那样。缺点是,当对象到达剪辑平面,它们明显消失了。它们通常留下它们的一部分任然可见,当他们的边缘穿过剪辑平面,会导致一个非常不自然的场景。在它们消失之前,你可以使用雾化效果通过允许它们逐步消失来帮助减少消失阅读全文
posted @ 2012-06-17 13:33 AppleSeeker(冯峰) 阅读(551) 评论(0) 编辑
摘要: 现在你已准备好去飞行,那让我们做一些过去小的游戏的变化,然后看看它的外观。ResetGame方法创建纸飞机对象并存储它到一个称为_plane类级变量中,为了以后能方便的访问。创建相机后,在初始化后,是没有追踪对象的。因此,相机位置服从手动提供的转换而不是跟随飞机。当工程运行后,初始化配置就出现了。房屋和飞机是可见的,但相机缓慢围绕场景。在游戏的CameraObject.Update函数中使用简单的旋转和转化矩阵来处理相机移动路径。当玩家轻拍下屏幕,然而,我们激活了追踪摄像机。游戏类的Update方法中检查屏幕的轻拍,每一次发现,它都将增加下一次的4个相机配置。以下代码将描述如何激活追踪相机。/阅读全文
posted @ 2012-06-09 11:48 AppleSeeker(冯峰) 阅读(281) 评论(0) 编辑
摘要: 为了允许游戏可以简单的使用追踪摄像机,我们将添加一个新的属性给MatrixCameraObject类,它可以放置目标对象的一个引用。如果这个属性,命名为ChaseObject,默认值为null,相机将完全像以前那样,仅按照它的位置和LookAtTarget坐标放置它本身。如果提供了游戏对象,然而,相机的行为将改变以便它围绕场景来跟随对象。当操作视角设置模式时,相机有2个责任它必须实现每一个它的Update方法:它必须放置它本身在目标对象后面,并且它必须直接看到目标对象。让我们看下它是如何实现的。首先,Update代码检查看下是否提供ChaseObject。如果不是,它申请默认的对象转换,不做任阅读全文
posted @ 2012-06-01 11:44 AppleSeeker(冯峰) 阅读(262) 评论(0) 编辑