单游戏,C#-在多人游戏中使用多种输入类型
我正在制作一个本地多人游戏。我需要能够使用键盘输入(最有可能只对玩家一)和其他游戏杆控制器为其余的玩家。我不能像大多数其他游戏那样使用PlayerIndex,因为它是为控制器设计的,不包括键盘输入。最好的方法是什么?不完全清楚您是想支持选择输入类型的选项,还是想同时使用多个输入类型。然而,既然你提到了多人游戏,我猜你只是在寻找一个解决方案,让玩家在键盘和控制器输入之间进行选择 这其实很简单:单游戏,C#-在多人游戏中使用多种输入类型,c#,input,monogame,joystick,C#,Input,Monogame,Joystick,我正在制作一个本地多人游戏。我需要能够使用键盘输入(最有可能只对玩家一)和其他游戏杆控制器为其余的玩家。我不能像大多数其他游戏那样使用PlayerIndex,因为它是为控制器设计的,不包括键盘输入。最好的方法是什么?不完全清楚您是想支持选择输入类型的选项,还是想同时使用多个输入类型。然而,既然你提到了多人游戏,我猜你只是在寻找一个解决方案,让玩家在键盘和控制器输入之间进行选择 这其实很简单: interface IGameInput { float GetXMovement();
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控制器来替换实现。不完全清楚您是否要支持选择输入类型的选项,或者,如果您确实希望同时使用多个输入类型。然而,既然你提到了多人游戏,我猜你只是在寻找一个解决方案,让玩家在键盘和控制器输入之间进行选择 这其实很简单:
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控制器替换实现