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% 的速度移动到左边。
总结一下:创建一个委托移动控件请求的接口,并根据用户是使用键盘还是手柄控制器来替换实现。
我正在制作本地多人游戏。我需要能够同时使用键盘输入(很可能只适用于玩家一号)和其他玩家的其他操纵杆控制器。我不能像大多数其他游戏那样使用 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% 的速度移动到左边。
总结一下:创建一个委托移动控件请求的接口,并根据用户是使用键盘还是手柄控制器来替换实现。