使用动画类跳转动画

时间:2014-07-27 23:31:45

标签: c# animation xna

我想在XNA中创建的2D小游戏中需要一些帮助。在我对XNA和C#感兴趣之前,我几乎没有编程知识,所以也许我的问题很简单,但我无法弄清楚。

基本上,我有一个基类,我为动画精灵创建了一个额外的类Animation。我实施了一些方法,以便当玩家按下"右"它会改变动画的当前纹理并将X增加xf的数量;无论如何,主要的想法是我只使用我的类的一个实例(基本上,一个动画类型的对象根据按下的键改变其纹理和属性)。

所以,我没有任何问题让它向右或向左跑。工作得很好。当我想实现跳转精灵时,最大的问题就出现了。所以我创建了精灵所需的6帧,但为了动画它我几乎不知道怎么做。

它现在唯一能做的就是遍历精灵的帧,但是位置(.X和.Y)保持不变。问题是,我有一个Vector2位置来保存动画的当前位置,并且运行起来很好,因为我只是递增它。但是,当涉及跳跃时,我希望它增加.X,但.Y应该递减(因此上升)直到第3帧;在第3帧之后,直到最后一帧,我希望.Y位置下降(因此下降)与相应的动画(erm,帧)。

所以,基本上,我不知道如何修改.X和.Y,以便在我需要的时候显示我需要的帧。我不知道你是否真的明白我想说的话;基本上当我按下" up"键,它循环通过帧但位置保持不变。

我的想法是使用对实际Vector2位置的引用来保存动画的当前位置,并将其传递给另一个Animation.cs类中的方法,即{{1并修改每个帧后的位置,并通过引用将其返回到实际的PlayAnimJump。即使我愿意这样做(虽然我没有看到它会有什么好处),但它不会按原样更新位置。那么,有什么想法吗?

以下是Game1.cs类{/ 1}}方法的代码:

PlayAnimJump

该类的默认构造函数:

Animation

按下向上键时,这是代码(来自主要代码):

public void PlayAnimJump(GameTime gameTime)
{
   elapsed += (float)gameTime.ElapsedGameTime.Seconds;
   sourceRect = new Rectangle(currentFrame * frameWidth, 0, frameWidth, frameHeight);
   currentFrame = 0;
   if (elapsed >= frameTime)
   {
      if (currentFrame <=3)
      {
         if (looping)
         {
            currentFrame++;
         }
      }
      else if (currentFrame > 3)
      {
         currentFrame++;
      }
      elapsed = 0;
   }   
}

所以,我不知道怎么做,但是我应该根据动画在那一秒显示的帧来改变public Animation(ContentManager Content,string asset,float frameSpeed, int numbOfFrames, bool looping,Vector2 positionIT) { this.assetName = asset; this.frameTime = frameSpeed; this.numbOfFrames = numbOfFrames; this.looping = looping; this.animation = Content.Load<Texture2D>(asset); frameWidth=(animation.Width / numbOfFrames); frameHeight=animation.Height; position = positionIT; } 。我错过了什么吗?

2 个答案:

答案 0 :(得分:0)

如果您的动画类引用了您想要移动的对象(即保持位置字段的对象),那么您可以在PlayAnimJump方法中的动画类中修改它。

或者,为了减少耦合,你可以让PlayAnimJump返回一个变量,指示你跳跃的距离(可能是跳跃的百分比,从0到1)。然后,您可以使用外部百分比来设置对象位置。因此,如果跳跃中途完成,返回值将为0.5f,您可以在等式中使用它来确定玩家的位置。一个示例等式是:

float percent = animation1.PlayAnimJump(gameTime);
float y = Math.Sin(percent * Math.PI) * maxJumpHeight;
player.positon.y = y;

这使用正弦波来确定整个跳跃动画中的玩家高度。您只需编写代码来确定PlayAnimJump方法中跳转(currentFrame)的百分比并返回它。

答案 1 :(得分:0)

Y坐标的frуefall公式为

y = g * t ^ 2 / 2 + v0 * t + y0

字符从高度y0开始沿着Y轴从起始速度v0跳跃,并且重力逐渐减慢并开始下降。 使用以下公式计算deltaY

deltaY = g * t ^ 2 / 2 + v0 * t

首先显示角色被推离地面的帧,然后是它上升的帧,直到达到跳跃的峰值。一旦符号将deltaY从+更改为 - 显示角色更改如何构成秋季。这样的事情。