2016-03-31 10 views
0

我正在製作一款本地多人遊戲。我需要能夠同時使用鍵盤輸入(最有可能僅用於玩家一)和其他玩家的其他遊戲杆控制器。我無法像其他遊戲那樣使用PlayerIndex,因爲它是用於控制器的,並且不包括鍵盤輸入。什麼是最好的方式去做這件事?Monogame,C# - 使用多種輸入類型進行多人遊戲

回答

2

您是否想要支持選擇輸入類型的選項,或者您是否想要同時使用多種輸入類型,這並不完全清楚。然而,既然你提到多人遊戲,我猜你只是在尋找一種解決方案,讓玩家在鍵盤和控制器輸入之間進行選擇。

這是很簡單的:

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控制器來替換實現。