0
我正在製作一款本地多人遊戲。我需要能夠同時使用鍵盤輸入(最有可能僅用於玩家一)和其他玩家的其他遊戲杆控制器。我無法像其他遊戲那樣使用PlayerIndex,因爲它是用於控制器的,並且不包括鍵盤輸入。什麼是最好的方式去做這件事?Monogame,C# - 使用多種輸入類型進行多人遊戲
我正在製作一款本地多人遊戲。我需要能夠同時使用鍵盤輸入(最有可能僅用於玩家一)和其他玩家的其他遊戲杆控制器。我無法像其他遊戲那樣使用PlayerIndex,因爲它是用於控制器的,並且不包括鍵盤輸入。什麼是最好的方式去做這件事?Monogame,C# - 使用多種輸入類型進行多人遊戲
您是否想要支持選擇輸入類型的選項,或者您是否想要同時使用多種輸入類型,這並不完全清楚。然而,既然你提到多人遊戲,我猜你只是在尋找一種解決方案,讓玩家在鍵盤和控制器輸入之間進行選擇。
這是很簡單的:
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控制器來替換實現。