任何人都可以解释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);
(您的问题对"比较模板"的含义有些含糊