Windows Phone 7范例游戏Platformer实战3——游戏资源和内容管道

我们知道,游戏不单只是代码,还存在许多其它的资源,比如说游戏图片、地图文件、视频和音频文件等。Platformer也不例外,XNA项目的所有的图片、地图场景文件、音频文件、字体等都被归为游戏的Assets,也就是游戏的资源。

 

通常说来,我们建立一个XNA的游戏项目时,VS2010都会内置一个称为内容管道(Content Pipeline)的东西。我们在Platformer项目中可以看到所有的游戏资源都在一个名为Content的内容管道项目中。该内容文件将游戏的背景图片、字体、关卡编辑文件、英雄和僵尸怪的精灵文件、所用的音频都囊括在内。如下图示所示

 

 

现在点击Platformer项目中的layer0_2背景图片,在Visual Studio 2010的属性窗口我们可以看到内容导入器(Content Importer)和内容处理器(Conten Processor)都被设置为Texture - XNA Framework,这意味着内容导入器将会把图片准备被内容管线作为纹理对象来使用。

 

 

将Build Action设置为Compile(编译)后,内容处理器会在编译时将转换好的纹理文件放到一个后缀为.xnb的二进制文件中,内容管理器可以直接访问.xnb文件并获取到纹理对象。(在计算机图形学中纹理指应用到3D物体表面的2D图像,在XNA的3D部分我们可以学到纹理的具体概念。不过现在我们这里姑且把纹理当做是2D图片的另外一种实现吧)。

 

将资源文件转化为.xnb有一个好处,就是用户或者其它开发人员无法直接获取你的游戏资源文件,目前还没听说那个反编译工具可以从.xnb文件直接提取资源。

 

内容导入器/内容处理器值除了纹理外,还可以包括视频、音频、字体、3D模型等,如下图所示。

 

 

 

Platformer游戏场景是由多个关卡组成的,在关卡生成时会向一些txt文本文件加载信息,这些文本文件使用不同的字符来代表不同的信息,包含了关卡的入口和出口位置、僵尸怪的起始位置、宝石和瓷快的位置等。关卡在绘制时会自动将这些字符转换为对应的图片。

 

  

                   图1   游戏场景呈现                                                    图2    关卡地图文本 

 

图1和图2是相应的文本文件和实际场景的对照图,对比可以看出字符‘1’代表英雄起始位置,#代表踏脚石,‘X’代表出口,‘.’表示空白,‘G’则是宝石了。

 

Platformer存在三种不同的瓷片,用于实现场景中的踏脚石和区域格挡。

 

瓷片名称

属性

Impassable

英雄和僵尸怪无论从何方向都无法穿过的瓷片,就是我们通常说的碰到南墙要回头的那种。

Passable

英雄和僵尸怪可以自由穿过的瓷片,该瓷片主要是起到装饰的作用,主要用来放置丛林叶子、岩石和其它风景元素。

Platform

这就是所谓的踏脚石了,英雄和僵尸怪可以在这种瓷片上站立,而不至于掉到游戏场景的最下面。

 

程序可以根据英雄或者僵尸怪的边界矩形和踏脚石最上方的坐标进行冲突检测。如果冲突发生,那么英雄或者僵尸怪的Y方向的速度将强制设置为0,这在英雄落下到踏脚石时发生。

 

如果英雄和僵尸怪站立或者跌落在一个可以自由穿过的瓷片上,任何冲突检测都不会发生。英雄或僵尸怪将一直下落,直到跌落到一个踏脚石或者游戏场景的最底端为止。

 

除了这些瓷片外,还有一些在场景中具备重要意义的对象。

 

名称

属性

Level Start

英雄出现在关卡的入口位置,面朝右端。

Gem

需要收集的宝石,英雄必须在时间耗尽和到达出口之前,收集完所有的宝石才能通过关卡。

Level Exit

英雄必须到在时间耗尽前到达这个位置才能通关,未能到达这个位置或者未收集全部的宝石的话,那么当前关卡会重新开始。

 

英雄特性

在游戏中,英雄可以跳跃和跑动,英雄在跳跃过程中会受到仿真的重力影响,这样才不会在跳跃的时候不会无休止地处于上升的过程。此外,英雄在跑动状态下突然停止时,存在一个逐渐减速的过程,这样也较符合我们真实场景中的实现。此外英雄还存在死亡、等待、庆祝三种状态。下面是英雄的部分精灵图片展现:

 

 

僵尸怪

僵尸怪被设定在一个平台上来回跑动,当到达平台的边缘时,它会立马调转方向而不至于掉落平台。Platforme游戏初始设定英雄无法杀死僵尸怪,而且一旦和僵尸怪接触,英雄会立即死亡导致闯关失败。

 

 

 

 

 好了,上面就是所有游戏需要的资源了,大家可以新建一个XNA项目分别导入Platformer的资源文件,当然你也可以直接下载Platformer项目直接查看。但是轩辕建议你还是从头练习一遍,毕竟动手获得的体会和看文章和代码是完全不同的。

 

posted @ 2010-12-09 13:49  軒轅  阅读(1361)  评论(1编辑  收藏  举报