0

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

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

谢谢。

4

1 回答 1

2

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

如果您的所有玩家都相同:

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

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

这将需要对您的输入管理结构进行一些修改。您的目标应该是概括您已经拥有的代码。

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

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

菜单逻辑:

处理玩家登录最好在加载任何关卡之前完成。我将假设您不需要玩家在游戏期间加入/退出。基本大纲:

  • 当游戏在角色选择屏幕(或只是主菜单)中时,检查来自所有控制器的输入。如果控制器按下“开始”,则让他们登录。例如,这可能涉及简单地将 playerIndex 添加到数组中。然后,当游戏加载时,检查数组中的活跃玩家并生成任何找到的玩家。

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

其他需要考虑的事项:

  • 是否从键盘和游戏手柄获得输入?如果是这种情况,将键盘默认为玩家一号可能会更容易,并且只允许从游戏手柄登录/退出。

  • 我之前提到过这一点,但是您需要概括您的输入管理以防止出现意大利面条代码的主要情况。为了使任何这些工作,您不应该直接从您的播放器类中检查以前/当前的控制器状态。MSDN 游戏状态管理示例值得研究,因为它使用了类似的系统。

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

于 2012-05-22T09:14:45.620 回答