【发布时间】:2016-03-31 10:53:06
【问题描述】:
我正在制作本地多人游戏。我需要能够同时为其他玩家使用键盘输入(很可能仅适用于玩家一)和其他操纵杆控制器。我不能像大多数其他游戏那样使用 PlayerIndex,因为它是为控制器制作的,不包括键盘输入。解决此问题的最佳方法是什么?
【问题讨论】:
标签: c# input monogame joystick
我正在制作本地多人游戏。我需要能够同时为其他玩家使用键盘输入(很可能仅适用于玩家一)和其他操纵杆控制器。我不能像大多数其他游戏那样使用 PlayerIndex,因为它是为控制器制作的,不包括键盘输入。解决此问题的最佳方法是什么?
【问题讨论】:
标签: c# input monogame joystick
目前尚不完全清楚您是否要支持 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控制器替换实现。
【讨论】: