第18章 多人游戏
?
本书的前面几章中讨论了创建真实的人工智能的困难。之前我们仅接触到了一点点的人工智能,而实际运用在最新版游戏中的复杂算法已经超出了本书的范围。到目前为止,您可能已经认识到了模拟人类玩家是多么困难的一件事。在许多情况下,它是如此的复杂,对于游戏来说是完全不可能的。
您偶尔会玩一下RTS(即时战略)游戏,里面电脑玩家基本都不做什么防备,或者玩一下足球模拟游戏,无论调用什么进攻方式,每次都只用一个防守方式阻拦进攻。这也是多人游戏为什么这么受欢迎的原因之一—没有什么能比得上跟一个真实存在的人类对打。说别人的坏话,打败对方,以及打赢游戏后的那种骄傲感都能带来无限的乐趣,而多人游戏真的可以成瘾。
本节中,我们将讨论在您的游戏中实现多人游戏功能的不同方法。首先,我们来学习如何在游戏上添加分屏显示功能,然后我们将试着用XNA框架联网API建立一个新游戏。
?
分屏显示功能
?
在您的游戏上添加多人游戏功能的一种方法是在一个显示器(适用于PC)或电视(适用于Xbox 360)上实现分屏显示。分屏显示通常支持一个,两个,三个,或四个玩家同时在一台机器上进行游戏。
当在游戏中实现分屏显示时,您需要考虑以下几个因素:
输入控制
通常,您需要支持Xbox 手柄输入,因为您也不想让两个,三个或四个人都挤在一个键盘前。
摄像机与角度
您可能会为每个玩家都准备一个独立的摄像机。您需要考虑摄像机的角度,怎样才能让玩家看到最好的动作场景。
面积
当您试着把多个屏幕挤进一个屏幕的时候,屏幕面积就显得十分珍贵。如果正在进行双人游戏,哪种屏幕分配运行起来会更有效?并排还是上下?
当在XNA中描绘场景时,图形设备中有一个叫做Viewport的属性在本书中还未被提及过。Viewport属性实际上是一个矩形,表示图形设备绘制场景时的屏幕坐标。默认情况下,Viewport被设置为客户端窗口的尺寸,从而使图形设备在整个游戏窗口上进行描绘。
通过更改图形设备的Viewport实现分屏显示,然后多次(每个玩家对应一个)描绘一个特定的场景,以玩家的视角作为摄像机描绘场景。
那听起来好像有很多信息,但是不要被吓倒了。看一下图18-1中双人游戏分屏显示的视图。
?
?
图18-1 典型的双人游戏分屏显示设置
?
为了描绘出一个双人游戏设置的典型垂直堆叠,如图18-1所示,您需要为每个玩家都创建一个视口(viewport),它将包含屏幕坐标,用来表示为这些玩家描绘的区域。
在您的Draw方法中,需要首先针对整个屏幕调用GraphicsDevice.Clear。这将清除中间的缓冲区。您在Clear方法中指定的颜色就是两个分屏幕之间的边界颜色。