2012-05-20 38 views
0

有没有关于如何在XNA游戏(Windows)中创建本地多人游戏的教程或示例?XNA中的本地多人游戏

我经常看到网络游戏的教程,但从来没有在如何进入第二个球员。如何让第二个玩家登录,使用相同的对象,但使用不同的控制器...

谢谢。

回答

2

我还没有遇到任何教程,但我可以概述一些基本的想法。

如果你的球员将是相同的:

修改你的“玩家”的对象的构造函数有一些playerIndex的参数。在播放器类中检查输入时,使用此索引。这样,您可以创建一堆“玩家”,而无需为每个人编写单独的课程。然后,您可以编写通用代码,如:

if (inputManager.IsMoveRight(playerIndex)) 
    { 
     // do some stuff etc. 
    } 

这将需要对输入管理结构进行一些修改。您应该旨在推广您已有的代码。

如果每一个玩家都会有完全不同的实现方式:

你需要充分利用多态性在这种情况下。如果每个玩家都应该在菜单屏幕中选择他们的角色,那么在玩家类中需要有一些属性来保存他们选择的角色(注意:如果每个玩家都应该是预设的默认值,即玩家1总是马里奥,玩家2始终是音速的,所以最好为每个玩家划分你的玩家类别)。如果需要,该属性可以向上移动一层并存储在“控制器”类中。

菜单逻辑:

处理玩家登录插件加载任何之前的水平真的是最好的做法。我假设在比赛中你不需要球员进/出。基本概述:

  • 当游戏处于字符选择屏幕(或者仅仅是主菜单)时,检查所有控制器的输入。如果一个控制器按下“开始”,就登录它。这可能涉及到简单地将一个playerIndex添加到数组中。然后,当游戏加载时,检查阵列中的活动玩家并产生任何找到的东西。

  • 尽管您可能需要特定的菜单登录屏幕,但字符选择可以以非常相似的方式实现。在登录屏幕中检查活动玩家的输入,并允许他们滚动并选择一个角色。将结果存储在某处(例如播放器或控制器类)。

其他需要考虑的事情:

  • 从键盘和游戏手柄让输入?如果是这种情况,那么将键盘默认为玩家可能会更容易,并且只允许从游戏手柄登录/注销。

  • 我之前提到过这个,但是你需要概括一下你的输入管理,以防止大意大利面代码。为了使这一切发挥作用,你不应该直接在你的播放器类中检查先前/当前的控制器状态。 The MSDN Game State Management样本值得研究,因为它使用了类似的系统。

这不是一个非常全面的指南,但希望我提出了一些要点供您考虑。