在c#中编码并使用XNA 4.0框架我正在尝试为播放器控制开发键盘和游戏控制器输入。
我的游戏控制器输入代码如下:
GamePadState gamepadState = GamePad.GetState(PlayerIndex.One);
if(gamepadState.ThumbSticks.Left.X != 0 || gamepadState.ThumbSticks.Left.Y != 0)
{
//Handles rotation
angle += thumbsticksMove(gamepadState); //handles Left.X and Left.Y input
normalize(); //normalizes angle and sets normalizedAngle = angle
this.Rotate(normalizedAngle); //takes value and passes it through Math helper
//atan and pi*2
//Ends handles rotation
pos += (angle * speed);
//Implementing framerate adjustment just for this class
timeSinceLastFrame += (float)gameTime.ElapsedGameTime.Milliseconds;
if (timeSinceLastFrame > millisecondsPerFrame)
{
timeSinceLastFrame -= millisecondsPerFrame;
Animation();
}
}
这会按预期移动播放器并且精灵翻转到正确的方向,但动画片段不工作。精灵应该根据输入时的玩家动作进行动画制作。从键盘输入信息时效果很好,见下文;
if (Keyboard.GetState().IsKeyDown(Keys.Right))
{
input = Vector2.Zero;
input.X = 1;
//Handles rotation
angle.X = input.X;
normalize();
this.Rotate(normalizedAngle);
//Ends handles rotation
pos += (input * speed);
//Implementing framerate adjustment just for this class
timeSinceLastFrame += (float)gameTime.ElapsedGameTime.Milliseconds;
if (timeSinceLastFrame > millisecondsPerFrame)
{
timeSinceLastFrame -= millisecondsPerFrame;
Animation();
}
}
我很难弄清楚它为什么适用于键盘输入但不适用于游戏控制器输入。它几乎看起来好像它试图制作动画,但从来没有完全通过第三个动画单元或动画如此快速到看起来好像它几乎没有动画。任何帮助都将非常感激!
答案 0 :(得分:0)
我最后添加了
if (gamepadState.IsConnected){//Gamepad code}
if (!gamepadState.IsConnected){//Keyboard code}
分别阅读输入似乎解决了这个问题。
感谢大家的帮助。