单体组:Game -PADSTATE构造函数



任何人都可以解释GamePadstate在引擎盖下做什么。我在网上看,找不到我了解的很多。

我认为也许您可以创建一个自定义的游戏组件,以用作比较模板,但也许不是?

如果我可以看到书面代码,我可能会弄清楚其中的一些。

任何帮助都赞赏,谢谢。

如果您查看了Ron Beyer在评论中链接到的GamePadstate.cs文件,您会看到Game -Padstate构造函数只是设置了各种按钮,触发器和拇指的初始状态。

您确实可以创建一个新的游戏板状态并传递到所有按钮,触发器等的状态。以便将其用作比较。

var thumbSticks = new GamePadThumbSticks(new Vector2(1, 1), new Vector2(0, 0));
var triggers = new GamePadTriggers(0, 1);
var buttons = new GamePadButtons(Buttons.A);
var dPad = new GamePadDPad(ButtonState.Released, ButtonState.Pressed, ButtonState.Released, ButtonState.Released);
var cState = new GamePadState(thumbSticks, triggers, buttons, dPad);
var cState2 = GamePadState.Default;
Console.WriteLine(cState == cState2); //false

但是,如果您尝试将构造的GamePadstate与从游戏板中获得的游戏板进行比较,那么它们将永远不会相等,因为PacketNumber不匹配

一个简单的解决方案是创建一个扩展方法,该方法可以比较两种状态,而无需评估PacketNumber

public static bool Compare(this GamePadState g1, GamePadState g2)
{
    return (g1.IsConnected == g2.IsConnected &&
        g1.Buttons == g2.Buttons &&
        g1.DPad == g2.DPad &&
        g1.ThumbSticks == g2.ThumbSticks &&
        g1.Triggers == g2.Triggers);
}

用法: gamePadState1.Compare(gamePadState2);

(您的问题对"比较模板"的含义有些含糊