Monogame,C# - 为多人游戏使用多种输入类型

Monogame, C# - Using multiple input types for multiplayer game

我正在制作本地多人游戏。我需要能够同时使用键盘输入(很可能只适用于玩家一号)和其他玩家的其他操纵杆控制器。我不能像大多数其他游戏那样使用 PlayerIndex,因为它是为控制器制作的,不包括键盘输入。解决此问题的最佳方法是什么?

尚不完全清楚您是否要支持 select 输入类型的选项,或者您是否真的想同时使用多种输入类型。但是,由于您提到的是多人游戏,我猜您只是在寻找一种解决方案,让玩家可以在键盘和控制器输入之间 select。

这真的很简单:

interface IGameInput
{
    float GetXMovement();
    float GetYMovement();
}

class KeyboardInput : IGameInput
{
    public float GetXMovement()
    {
        var state = Keyboard.GetState();
        var leftDown = state.IsKeyDown(Keys.A);
        var rightDown = state.IsKeyDown(Keys.D);
        float finalValue = 0;
        if (leftDown)
             finalValue -= 1;
        if (rightDown )
             finalValue += 1;
        return finalValue;
    }
    public float GetYMovement()
    {
        // Same as X, just check for W and S instead.
    }
}

class ControllerInput : IGameInput
{
    public float GetXMovement()
    {
        var state = Gamepad.GetState(0); // or whatever the syntax is, I forgot.
        var xMovement = state.LeftThumb.X;
        return xMovement;
    }
    public float GetYMovement()
    {
        var state = Gamepad.GetState(0); // same as above
        var yMovement = state.LeftThumb.Y;
        return yMovement;
    }
}

// other class
var x = this.input.GetXMovement() * this.MovementSpeed;
var y = this.input.GetYMovement() * this.MovementSpeed;
this.Position = this.Position + new Vector2(x, y);

非常基本的概念。请注意,这意味着在键盘上,您将始终以 100% 或 0% 的移动速度移动,而在使用控制器时,如果您仅将拇指向左移动 50%,则它只会以 50% 的速度移动到左边。

总结一下:创建一个委托移动控件请求的接口,并根据用户是使用键盘还是手柄控制器来替换实现。