【问题标题】:Monogame, C# - Using multiple input types for multiplayer game [closed]Monogame,C# - 为多人游戏使用多种输入类型 [关闭]
【发布时间】:2016-03-31 10:53:06
【问题描述】:

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

【问题讨论】:

    标签: c# input monogame joystick


    【解决方案1】:

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

    这真的很简单:

    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% 的速度移动到左边。

    总结一下:创建一个代理移动控制请求的接口,根据用户是使用键盘还是Gamepad控制器替换实现。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-31
      • 2023-03-04
      • 2011-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多