0

查看 XNA 套件的一些输入GSM,我注意到其中一些 booleans有两个参数,而另一些只有一个。为什么?两者有区别吗?

这是两个示例,后面是整个代码的链接。

        /// <summary>
    /// Checks for a "pause the game" input action.
    /// The controllingPlayer parameter specifies which player to read
    /// input for. If this is null, it will accept input from any player.
    /// </summary>
    public bool IsPauseGame(PlayerIndex? controllingPlayer)
    {
        PlayerIndex playerIndex;

        return IsNewKeyPress(Keys.Escape, controllingPlayer, out playerIndex) ||
               IsNewButtonPress(Buttons.Back, controllingPlayer, out playerIndex) ||
               IsNewButtonPress(Buttons.Start, controllingPlayer, out playerIndex);
    }


    /// <summary>
    /// Checks for a "menu cancel" input action.
    /// The controllingPlayer parameter specifies which player to read input for.
    /// If this is null, it will accept input from any player. When the action
    /// is detected, the output playerIndex reports which player pressed it.
    /// </summary>
    public bool IsMenuCancel(PlayerIndex? controllingPlayer,
                             out PlayerIndex playerIndex)
    {
        return IsNewKeyPress(Keys.Escape, controllingPlayer, out playerIndex) ||
               IsNewButtonPress(Buttons.B, controllingPlayer, out playerIndex) ||
               IsNewButtonPress(Buttons.Back, controllingPlayer, out playerIndex);
    }

完整的 InputState 代码

4

2 回答 2

2

第一个函数告诉你玩家按下了暂停按钮,但没有告诉你是哪个。第二个函数告诉你一个玩家取消了菜单并告诉你是谁做了它。这就是out PlayerIndex playerIndex这个函数的参数。

基本上,开发人员选择传递或不传递他们从输入检测功能接收到的信息。

至于为什么,我想知道哪个玩家关闭菜单很重要。例如,在 PES 中,每个玩家设置他的设置,然后按下取消菜单按钮。只有当两个玩家都按下取消按钮时,菜单才会真正关闭。

猜猜,关于谁请求暂停的信息不相关,因此不会传递出去。

于 2012-05-14T00:10:08.477 回答
1

如果您想指定一个特定的人来寻找输入,则使用控制播放器。如果未指定,它将查看所​​有控制器。玩家索引指定谁按下了所提供的输入。这就是为什么它是一个输出参数。

于 2012-05-14T00:09:11.360 回答