我想在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;
}
。我错过了什么吗?
答案 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从+更改为 - 显示角色更改如何构成秋季。这样的事情。