我需要在XNA中创建一个小型2D游戏,但是我之前几乎没有编程知识,所以我的问题可能很简单,但我就是无法解决。基本上,我有一个基类,并为动画精灵创建了一个额外的类Animation。我实现了一些方法,以便当玩家按下“向右”时,它会更改动画的当前纹理并将X增加xf个数字;总之,主要思想是我只使用了一个类的实例(基本上是一种类型的动画对象),该对象根据按下的键更改其纹理和属性。
所以,我制作它向左或向右运行时没有任何问题。效果非常好。当我想要实现跳跃精灵时,大问题开始了。因此,我创建了6个必要的精灵帧,但是我几乎不知道如何对其进行动画处理。
它现在唯一做的事情就是循环播放精灵的帧,但是位置(.X和.Y)保持不变。问题是,我有一个Vector2位置,它保存动画的当前位置,对于运行来说,这很好,因为我只是增加它。然而,当涉及到跳跃时,我希望它递增.X,但是.Y应该递减(从而上升)直到第3帧;在第3帧之后,直到最后一帧,我希望.Y位置随着相应的动画(呃,帧)下降(从而掉落)。
因此,基本上,我不知道如何修改.X和.Y,以便在需要的时间内显示我需要的帧。我不知道您是否真正理解我想说什么;基本上,当我按“向上”键时,它会循环播放帧,但位置保持不变。
我的想法是使用对保存动画当前位置的实际Vector2位置的引用,并将其传递给其他Animation.cs类中的方法,即PlayAnimJump,并在每个帧之后修改该位置并通过引用将其返回到实际Game1.cs中。即使我这样做了(尽管我看不出有什么好处),它也不会像应该更新位置。所以,有什么想法吗?
以下是Animation类中PlayAnimJump方法的代码:
该类的默认构造函数:
这是按下向上键时的代码(从主体中获取):
所以,我不确定该如何做,但是根据动画中显示的框架,我应该更改
所以,我制作它向左或向右运行时没有任何问题。效果非常好。当我想要实现跳跃精灵时,大问题开始了。因此,我创建了6个必要的精灵帧,但是我几乎不知道如何对其进行动画处理。
它现在唯一做的事情就是循环播放精灵的帧,但是位置(.X和.Y)保持不变。问题是,我有一个Vector2位置,它保存动画的当前位置,对于运行来说,这很好,因为我只是增加它。然而,当涉及到跳跃时,我希望它递增.X,但是.Y应该递减(从而上升)直到第3帧;在第3帧之后,直到最后一帧,我希望.Y位置随着相应的动画(呃,帧)下降(从而掉落)。
因此,基本上,我不知道如何修改.X和.Y,以便在需要的时间内显示我需要的帧。我不知道您是否真正理解我想说什么;基本上,当我按“向上”键时,它会循环播放帧,但位置保持不变。
我的想法是使用对保存动画当前位置的实际Vector2位置的引用,并将其传递给其他Animation.cs类中的方法,即PlayAnimJump,并在每个帧之后修改该位置并通过引用将其返回到实际Game1.cs中。即使我这样做了(尽管我看不出有什么好处),它也不会像应该更新位置。所以,有什么想法吗?
以下是Animation类中PlayAnimJump方法的代码:
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;
}
这是按下向上键时的代码(从主体中获取):
else if (up)
{
check = animation1.GetAsset();
if (check == "eright")
{
animation1.SetFrameSpeed(0.8f);
animation1.SetNumbOfFrames(6);
animation1.ChangeTexture(Content, "SarimCumVreJiorjica");
animation1.PlayAnimJump(gameTime);
/*position1.x +=2f;
position1.Y -=2f;
*/
}
所以,我不确定该如何做,但是根据动画中显示的框架,我应该更改
position1
。我有什么遗漏吗?