XNA中的本地多人游戏

时间:2012-05-20 18:37:02

标签: xna multiplayer

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

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

感谢。

1 个答案:

答案 0 :(得分:2)

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

如果所有玩家都相同:

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

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

这需要对输入管理结构进行一些修改。您应该致力于概括已有的代码。

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

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

菜单逻辑:

在加载任何关卡之前,最好先处理玩家登录。我假设你不需要球员在比赛期间进/出。基本概要:

  • 当游戏进入角色选择屏幕(或仅主菜单)时,检查所有控制器的输入。如果控制器按下'start',则将它们签入。这可能只涉及将arrayIndex添加到数组中。然后,当游戏加载时,检查阵列中的活跃玩家并产生任何找到的玩家。

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

需要考虑的其他事项:

  • 从键盘和游戏手柄获取输入?如果是这种情况,可能更容易将键盘默认为播放器,并且只允许从游戏手柄登录/退出。

  • 我之前提到过这一点,但您需要对输入管理进行概括,以防止出现意大利面条代码的重大案例。为了使其中任何一个工作,您不应该直接在您的播放器类中检查先前/当前控制器状态。 The MSDN Game State Management样本值得研究,因为它使用了类似的系统。

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