赞助广告

 

年份

最新评论

评论 RSS

XNA 3.0——将数据保存到文件,从文件读取数据

clock 十月 17, 2010 20:24 by author alex
1.9 将数据保存到文件,从文件读取数据 问题 你需要在游戏中实现保存功能。解决方案虽然保存功能通常是创建游戏的最后一步,但你肯定需要在游戏中实现这个功能。首先,XNA使用默认的.NET文件I/O 功能,这意味着创建/打开/删除文件是很容易的。接着,使用XmlSerializer类能非常容易地将数据保存到文件并在以后加载数据。 唯一的问题是找到在PC平台和Xbox360平台都能保存的位置,要解决这个问题,你可以使用StorageDevice,它必须首先被建立。 注意创建一个StorageDevice的原理可能很复杂,但别被吓倒,因为本教程的其余部分(从“将数据保存到磁盘”) 非常简单和... [更多...]

XNA 3.0初步——突现GameServices

clock 十月 17, 2010 20:20 by author alex
1.8实现GameServices 问题 如在教程1-6中解释的那样,你可以将代码放在可复用的GameComponent类中,这些组件可以是相机、粒子系统,用户输入,billboard等。 使用GameComponent类的一个最主要的好处是你可以很容易在它们之间切换,例如相机模式。要把第一人称相机模式变到四元数相机模式只需在Game类的Initialize方法中包含一条代码即可。 但你必须保证在切换组件时不会改变其余代码(这些代码都要使用相机)。 解决方案 你可以让相机组件拥有同一个接口,例如(自定义)ICameraInterface接口。当初始化相机组件时,你需要让Game类知... [更多...]

XNA 3.0初步——使用GameComponents

clock 十月 17, 2010 20:10 by author alex
1.7 使用GameComponents 问题 你想将应用程序分离为GameComponent 类,实现组件的复用。 解决方案 程序的特定部分可以从程序中分离出来。在一个XNA程序中,大多数此种类型的部分都需要被更新和绘制,例如粒子系统和billboard(通常翻译为公告板或广告牌)系统(见教程3-11和3-12)。 正确的做法是为这些特定部分创建一个单独的类。在XNA Game 类中,创建这个类的实例,对它进行初始化,更新和绘制。所以你想让你的新类拥有自己的Initialize, (Un) LoadContent,Update和Draw方法,这让你就可以很容易地在Game类中调用它... [更多...]

黄金法则和技巧

clock 十月 17, 2010 17:11 by author alex
黄金法则和技巧 以下是这本书提到的一些“黄金法则”和诀窍。 诀窍 你需要在Xbox 360上有一个Xbox 360 Live帐户,当年开发和测试您的XNA游戏是它必须一直在线。 请确保您的PC和Xbox 360都在同一网络中并可以可以“看到”对方。您可以从电脑上pingXbox 360的IP或将Xbox 360游戏机作为媒体中心连接到您的PC机上。 当您在XNA Game Lanucher的设置中创建一个加密密钥但PC不接受时,可能是因为你输入错误,或它包含0(数字零)和O字母,看起来几乎相同,只是再次尝试即可。您可以随时创建一... [更多...]

调整和改编赛车游戏——总结

clock 十月 17, 2010 17:08 by author alex
总结 漫长的一章和漫长的一本书。但考虑到这是我写的第一本书,我还是希望你能喜欢它,并从游戏示例中学到东西。我很喜欢本书的游戏示例,我认为编写游戏的实践方法能帮助初学者,对于高级读者可以跳过简单的部分,并看看游戏编程世界中的更复杂的东西。 这本书几乎涵盖所有学习XNA和游戏的知识,但每个专题分布在不同章节中。例如,物理学一章对于一些普通物理计算也是有用的,但把它与赛车游戏联系在一起能更容易地思考问题。即使你想使用其他物理计算开发一个完全不同的游戏,您也会从中受益,你测试物理引擎时可能会形成一些解决物理问题早期构思。 祝贺你读完了这本书,但你不应该停下来。希望您急于开始编写自己的图形引擎项目... [更多...]

调整和改编赛车游戏——挑战:编写自己的改编游戏

clock 十月 17, 2010 17:05 by author alex
挑战:编写自己的改编游戏 本书的最后一个挑战是创建自己的赛车游戏改编版本。您可以实现自己的游戏构思,也可以跟随下面Speedy Racer编写代码的过程。 正如你在本章一开始就看到的,Rocket Commander有相当多的改编版本。仅2006年一年就有超过12个项目,也许还有更多,但相有关人士可能羞于分享他们的游戏或他们不想让别人知道他们使用了Rocket Commander引擎。当然,也有可能是我不知道还有更多的游戏改编版本,它们可能在互联网上某处。 Racing Game和XNA Shooter也有很大的改编潜力。不仅是因为这些游戏不像Rocket Commander那么针对特... [更多...]

调整和改编赛车游戏——更多的想法

clock 十月 17, 2010 17:01 by author alex
更多的想法 游戏现在已经运行得很好了,如果你已通过最终的测试它就可以发布了。但即使您可能还没有全部完成,你也可能要尝试更多的想法或思考未来的扩展。我发现自己经常重用现有的引擎来测试新的游戏构思。使用您已经熟悉的现有引擎比从头开始更容易。 本节的内容是关于我在游戏开发时甚至在开发前的一些额外构思。 更多汽车 有更多的车辆模型是我的愿望之一,但由于我不是一个模型设计师,也没有我认识的模型设计师有很多时间为我的小赛车游戏创建一些车辆模型,我只有几个专为赛车游戏制作的三维汽车模型。通过改变汽车的纹理改变汽车的外观相对容易,starter kit中有三个不同的汽车纹理,还有一些代码能动态地改变汽... [更多...]

调整和改编赛车游戏——最后的单元测试和调整

clock 十月 17, 2010 16:54 by author alex
最后的单元测试和调整 现在您拥有了游戏的所有类,但还没完。我们已经谈到了几次Player类,但你从来没有见过它的调用。原因是XNA分隔了更新和渲染代码。如果你看一下RacingGame类的Update方法,你终于可以看到对Player类Update方法的调用: /// <summary> /// Update racing game /// </summary> protected override void Update(GameTime time) { // Update game engine base.Update(time); ... [更多...]

调整和改编赛车游戏——游戏屏幕

clock 十月 17, 2010 09:52 by author alex
游戏屏幕 赛车游戏中有很多不同的游戏屏幕,这些都是由RacingGame类中的gameScreens堆栈管理的。本节介绍游戏中使用的大部分屏幕和对应的功能。大多数游戏屏幕相当简单,但其他的有点复杂并实现了一个单元测试,通过单元测试能更好地了解这个类。例如,Credits屏幕是相当简单的,它只显示一个背景纹理,但主菜单很复杂并具有所有能进入另一个屏幕的按钮。Options屏幕介绍了许多新的控制选项,这些都要进行测试,这个类里有一个单元测试能帮你完成这个过程。 所有的游戏屏幕类都继承于IgameScreen接口(见图14-6),您也许还记得在第8章的Rocket Commander中也使用过。... [更多...]

调整和改编赛车游戏——游戏构思

clock 十月 17, 2010 00:17 by author alex
游戏构思 在你开始游戏屏幕和游戏逻辑之前,快速浏览一下这个游戏的原始构思,这样你能理解为什么某些东西实现了而有些却没有。在游戏的主要功能实现后,一些部分才在后面添加。这方面的一个例子是阴影映射,这始终是游戏引擎的复杂部分,因为你要花费大量的时间进行调整,直到它看起来正确。还有些东西必须跳过或故意排除在外,因为它们实在太复杂,在短时间内很难实现。最好的例子是道路上的障碍物(例如柱子),如果玩家不小心驾驶就会撞在障碍物上(见图14-2)。 图 14-2 这一想法的主要问题是如何有效率地设置障碍栏。这个游戏没有关卡编辑器或赛道编辑器。所有赛道都是由采样点生成的,很难在3DS Max中设置... [更多...]

调整和改编赛车游戏——概览

clock 十月 17, 2010 00:14 by author alex
概览 终于到本书的最后了,只剩最后一章了。你将了解赛车游戏所有的细节。本章你将学习所有的游戏屏幕、游戏逻辑、记分系统以及一切你您需要的东西。场景和赛道的大多数渲染技术已经在第12章讨论过了,但本章会增加一点阴影。因为上一章已讨论过物理学和汽车控制,现在应该可以插入此代码,并开始测试游戏本身。 本章的主要目的是让你熟悉赛车游戏和底层代码。在本章最后你应该知道一切以创建自己的改编赛车游戏。游戏改编可以很简单,只需改编图形和三维模型,也可以改变整个游戏的逻辑,使它不再是一个赛车游戏。例如Rocket Commander也是可以改编的,但游戏逻辑和渲染代码是固定的。你可以或多或少地改变模型,并新增... [更多...]

物理学——总结

clock 十月 16, 2010 23:58 by author alex
今天物理学已成为了游戏的一个重要组成部分,但你也看到它不是很容易将一个现成的物理引擎在XNA中实现。但是,你仍然可以通过自己的方式实现物理引擎,并可运行于Xbox 360上,而Xbox 360上是不允许非托管代码的。 物理学有许多议题,可以肯定全部都自己实现是不容易的,即使有一个良好的物理引擎你还必须做大量的调整和测试。然而,如果与你竞争的另一个游戏有大量的物理效果又不破坏游戏的乐趣,那么相对你的只有基本规则的游戏,那个游戏会更好。从这章的篇幅和在本书中的位置,你也应该意识物理不是一个简单的议题,特别是对初学者来说。虽然本章未能涵盖物理引擎的方方面面,但至少已了解了现有的物理引擎。如果你有兴... [更多...]

物理学——挑战:实现道路碰撞检测

clock 十月 16, 2010 23:57 by author alex
如果前一章你觉得容易,现在将有点难。你的任务是查看CarPhysics类并弄懂如何相同的物理代码和碰撞检测是如何将车保持在赛道上,以及如何处理与护栏(不是一条直线)的碰撞。 要完成此项任务,最好是写一个单元测试,它绘制赛路,并让你以在TestCarPhysicsOnPlaneWithGuardRails单元测试中同样的方式控制汽车,以同样的方式处理游戏本身。但是,你也可以在CarPhysics类的Update方法设置断点来测试物理效果,然后通过步进代码看看变量是如何变化的。图13-16显示了这样一个单元测试。 Figure 13-16 如果你真的像扩展游戏并增加更多的功能,可以尝试... [更多...]

物理学——车辆碰撞检测

clock 十月 16, 2010 23:56 by author alex
车辆碰撞检测 借助于前面的代码,我们已经知道如何检测汽车与护栏的碰撞。只需创建两个碰撞平面,每个护栏一个,然后检查四个轮子与这两个平面的碰撞。因为赛车不仅是一个球体,因此无法像小行星那样做简单的处理,四个面都必须检测,但只检测四轮的位置(或至少是赛车的最外层)仍能实现基本碰撞检测(见图13-15)。 Figure 13-15 碰撞检测的代码在CarPhysics类的ApplyGravityAndCheckForCollisions方法中。此代码遍历了赛车的四个角并检测是否与平面碰撞(见图13-15中的道路旁边的两条线)。在实际车长和宽的基础上可计算赛车的四个角: // Che... [更多...]

物理学——实现物理效果

clock 十月 16, 2010 23:52 by author alex
实现物理效果 现在可以深入讨论赛车游戏所需的物理学了。今天你能看到许多强大的物理引擎的一些功能,但因为它们很难被实现而且也没有用.NET编写,所以你将通过自己的方式实现物理引擎。 在本章开始你处理了汽车控制和简单的重力效果。目前缺少的是准确的碰撞检测系统,当撞上一个护栏时你的车应该停止。你还将处理一些比较复杂的情况,比如说通过环形轨道等。环形轨道不难实现。借助于上一章的赛道生成代码,你能很容易地通过添加两个采样点添加赛道,如果你的物理系统能正确处理汽车的受力,那么沿着环形轨道驾车几乎是自动处理的。 处理环形轨道 在你继续实现难点前(碰撞检测和响应,这是CarPhysics类的主要代... [更多...]

物理学——物理引擎

clock 十月 9, 2010 09:10 by author alex
物理引擎 有了基本物理学的新知识,现在你可以较容易地比较现有的物理引擎了。实现了基本的东西和确定在系统中已定义了正确的常量并感觉良好之后,你应该考虑一下游戏的需求。物理引擎往往可以做很多不同的东西,许多物理演示和教程看上去很酷,但往往不能用于大多数游戏。第一次看到一堆箱子互相碰撞很有趣,但很少有游戏允许直接控制箱子并推动它们,而且看多了箱子翻倒就会觉得无趣,这就好象再一次回到了幼儿园一样。 但是,并非所有的演示仅仅是一堆方块。有许多很好的示例向你展示物理引擎的特殊功能,但我的观点是,大多数游戏只需要某些特定功能。第一人称射击游戏可能会用到大多数的功能,这点你可以在近几年中发售的游戏中看到。... [更多...]

物理学——牛顿运动定律

clock 十月 9, 2010 08:51 by author alex
牛顿运动定律 让我们快速浏览一下运动学的重要定律。图13-2显示了看到这些物理规则: 第一定律——物体总保持静止或匀速直线运动状态,直到有外来迫使它改变这种状态。这很容易,因为所有物体运动都有一个运动向量或速度向量,除非你施加了力让其减速,加速或改变方向,否则不要改变该值。 第二定律——当施加一个外力时,这意味着你可以使物体加速或减速,如果超过一个维度(3D游戏中有三维),你还可以改变物体运动的方向。在这种情况下你使用向量代替标量,所有向量部分(x、y和z)都将发生变化。由于物体质量永... [更多...]

物理学——概览

clock 十月 9, 2010 08:45 by author alex
概览 近些年来在游戏中使用物理学变得越来越流行。老游戏没有任何物理学,但最近许多射击游戏具有复杂的物理系统,这些系统只有通过计算能力的巨大提升和和多核系统才有可能实现。最近还出现了硬件PPU(物理处理单元),类似于GPU处理图形,这些处理器只计算物理系统。 使用物理学最多的游戏是第一人称射击游戏,特别是在那些玩家具有较大的自由度并允许自由走动并和场景发生互动的游戏中。其中最流行的游戏是2004年底发布的Half-Life 2,这个游戏使用了大量创新的物理技术,并在游戏中和任务设计中也涉及物理学。 Half-Life 2内部使用了商业的Havok物理引擎和其他一些物理框架,这马上就会说到。... [更多...]

创建场景和赛道——总结

clock 十月 8, 2010 11:27 by author alex
总结 在这一章中你学到了很多关于渲染复杂3D物体的知识,如场景、赛道和在赛车游戏中创建关卡。希望也可用于其他游戏,当为游戏创建场景时你要记得下列几件事: 总是先判断玩家是如何看场景的。看上去很棒的场景其实没多大意义,这种场景只在近距离看时很棒,这种场景在策略游戏、RPG游戏或赛车游戏中只覆盖了50米2面积。而在这类游戏中你需要面积更大,这意味着你要么重复纹理或有更好的渲染技术将细节纹理整合成一个大纹理,或使用splatting“绘制”场景地面。 对于创建巨型场景,Splatting是一个很好的技术。大多数游戏使用纹理... [更多...]

创建场景和赛道——挑战:为赛道建立一个新的单元测试

clock 十月 8, 2010 11:25 by author alex
本章处理了不少复杂的问题,你很可能会觉得难,所以这次我布置了一个简单的任务。进入TrackLine类并为一个简单的赛道添加新的单元测试。你只需要新增一些顶点并测试它们直到赛道看起来足够好。 图12-22显示了一个这种自定义赛道的例子。请注意,这本书中为了看上去更好,我颠倒了截图。你也可以使用一个如第8章中所展示的倒置post-screen shader。 Figure 12-22 如果你还有精力,可试着通过TrackImporter类从3D Studio Max中导入赛道,然后在Track类或LandScape类测试它们。总之,享受一下场景和赛道渲染代码。但愿它对其他游戏项目也是有... [更多...]

友情链接赞助