玩家动画在接受游戏控制器输入时不起作用,但在接受键盘输入时工作

本文关键字:输入 工作 键盘 控制器 动画 游戏 玩家 不起作用 | 更新日期: 2023-09-27 17:56:28

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();
       }
}

我很难弄清楚为什么它适用于键盘输入而不是游戏控制器输入。 它看起来几乎就像是在尝试动画,但从未完全通过第三个动画单元,或者动画速度如此之快,以至于看起来好像它几乎没有动画。 任何帮助将不胜感激!

玩家动画在接受游戏控制器输入时不起作用,但在接受键盘输入时工作

我最终添加了

if (gamepadState.IsConnected){//Gamepad code}
if (!gamepadState.IsConnected){//Keyboard code}

单独读取输入似乎已经解决了这个问题。

不过,谢谢大家的帮助。