§14.4更多的想法

游戏现在已经运行得很好了,如果你已通过最终的测试它就可以发布了。但即使您可能还没有全部完成,你也可能要尝试更多的想法或思考未来的扩展。我发现自己经常重用现有的引擎来测试新的游戏构思。使用您已经熟悉的现有引擎比从头开始更容易。

本节的内容是关于我在游戏开发时甚至在开发前的一些额外构思。

更多汽车

有更多的车辆模型是我的愿望之一,但由于我不是一个模型设计师,也没有我认识的模型设计师有很多时间为我的小赛车游戏创建一些车辆模型,我只有几个专为赛车游戏制作的三维汽车模型。通过改变汽车的纹理改变汽车的外观相对容易,starter kit中有三个不同的汽车纹理,还有一些代码能动态地改变汽车的颜色,但它们都使用相同的基本几何体。

本章最后展示的改编版本Speedy Racer Game,有另一个汽车模型(从互联网上下载的免费版本),但有不同类型的汽车将使游戏更有趣,尤其是每辆汽车都有不同的速度,加速度,刹车等参数。对于多人游戏,有不同的汽车会更有趣,使每个玩家都可以选择自己最喜欢的汽车类型。

但是,在第12章中你看到商业赛车游戏有很多汽车会耗费了大量的金钱来开发,同时也要花很长时间让这些车表现优秀。希望社会中能找到办法导入新的车型,一段时间后会有足够多的游戏改编版本,从这些改编版本中找到汽车模型去制作更好的改编版本。渲染汽车的非常具体,例如,Model类中使用专有的RenderCar方法只用来渲染汽车。如果你有一个以上的车型将很难更新这个方法,或许实现通用的Render方法会更好。

在线排行榜名单

实现对Web服务的调用并从那获得前10名在线排行榜可能问题不大。你可以在Highscore类中添加这些代码,你可以重用Rocket Commander的大多数现有代码。在您可以使用网络服务前您必须添加System.Web.Services引用,这只适用于Windows平台。你要添加到Highscore类的所有网络服务代码必须在Xbox 360平台上被禁用。

Highscore[] onlineHighscores = new Highscore[10];

Thread onlineGetHighscoreThread = null;

/// <summary>

/// Get online highscores

/// </summary>

/// <param name="onlyThisHour" > Only this hour<param />

private void GetOnlineHighscores(bool onlyThisHour)

{

// Clear all online highscores and wait for a new update!

for (int num = 0; num < onlineHighscores.Length; num++)

{

onlineHighscores[num].name = "-";

onlineHighscores[num].level = "";

onlineHighscores[num].points = 0;

} // for (num)

// Stop any old threads

if (onlineGetHighscoreThread != null)

onlineGetHighscoreThread.Abort();

// Ask web service for highscore list! Do this asyncronly,

// it could take a while and we don't want to wait for it to complete.

onlineGetHighscoreThread = new Thread(

new ThreadStart(

// Anoymous delegates, isn't .NET 2.0 great? ^^

delegate

{

// See notes above

try

{

string ret = new www.xnaracinggame.com. RacingGameService().GetTop10Highscores(onlyThisHour);

// Now split this up and build the online highscore with it.

string[] allHighscores = ret.Split(new char[] { ',' });

for (int num = 0; num < allHighscores.Length && num < onlineHighscores.Length; num++)

{

string[] oneHighscore = allHighscores[num].Split(new char[] { ':' });

onlineHighscores[num] = new Highscore( oneHighscore[0].Trim(), oneHighscore[2], Convert.ToInt32(oneHighscore[1]));

} // for (num)

} // try

catch

{

} // ignore any exceptions! }));

onlineGetHighscoreThread.Start();

} // GetOnlineHighscores(onlyThisHour)

为了此代码正常工作您需要在RacingGameService类的指定位置运行一个网络服务编写网络服务本身不难,但实现一个漂亮的网站将数据显示给访问者要做大量的工作。也许这项工作会在以后进行。

更多Shader和特效

在游戏中包含更多的shader和特效始终是一件好事,至少从玩家的角度看,因为游戏看上去更酷,与几年前的游戏有更多不同,那时许多游戏采用类似的渲染技术,看上去都很类似。你可以很容易插入的一个shader是来自与Rocket Commander的视差映射,但要使用视差映射代替标准的法线映射,你需要在材质上应用高程图。但是,添加类似图14-19,您目前没有特效用于汽车爆炸或撞上东西。

图14-19

图14-19

欲了解更多post screen shader的例子可回到第8章看一下。赛车游戏将极大地受益于HDR渲染,特别是如果你改变光照情况并驱车通过隧道时。

第8章讨论过的每像素运动模糊效果也比目前的全屏post screen 效果更好,但显然也难得多。

我一直在改进赛车游戏改编版本过程中做的主要一件事就是改变PostScreenMenu和PostScreenGlow类的颜色校正因素和基本着色代码。无需改变所有的纹理就能使整场游戏有一个截然不同的表现。

更多的游戏模式

更多的游戏模式也很有趣。我不是一个真正的赛车游戏专家,但实现一个或多个通用的游戏模式也许是有趣的,您能经常在商业赛车游戏中发现不同的游戏模式:

多人模式

如果你和一些朋友在局域网或在互联网上共同进行游戏,那么刚才讨论的游戏模式会变得有趣得多。由于Xbox 360不支持网络代码,多人模式只能工作在PC上。

在实现网络的基本代码后,主要的变化在Player中,要允许这个类的多个实例。您还需要处理玩家列表并在多人消息的帮助下更新每个玩家的数据。仅此一点就可以写一本书,因为多人游戏有许多议题,而且有许多方式能实现这些代码。

作为一个小例子,看一下图14-20,此图显示了一些多人网络类。游戏类保存玩家列表。每个玩家从其他玩家处接收消息并将所有接受到的消息添加在一个内部列表中。而通过Message类和MessageType枚举加载消息。

图14-20

图14-20


发布时间:2008/11/21 下午12:39:07  阅读次数:5554

2006 - 2024,推荐分辨率 1024*768 以上,推荐浏览器 Chrome、Edge 等现代浏览器,截止 2021 年 12 月 5 日的访问次数:1872 万 9823 站长邮箱

沪 ICP 备 18037240 号-1

沪公网安备 31011002002865 号