我正在使用XNA开发我的第一款2D游戏,我遇到了一些问题。 要为我的Sprite提供运行效果,我使用此代码(正确运行)滚动 SpriteSheet :
if (AnimationDelay == 6)
{
if (CurrentFrameR.X < SheetSizeR.X)
{
++CurrentFrameR.X;
}
else
{
CurrentFrameR.Y++;
CurrentFrameR.X = 1;
}
if (CurrentFrameR.Y >= SheetSizeR.Y)
{
CurrentFrameR.X = 0;
CurrentFrameR.Y = 0;
}
AnimationDelay = 0;
}
else
{
AnimationDelay += 1;
}
xPosition += xDeplacement;
}
这些是使用的对象:
Point FrameSizeR = new Point(29, 33);
Point SheetSizeR = new Point(5, 1);
Point CurrentFrameR = new Point(0, 0);
int AnimationDelay = 0;
当精灵运行时,我有不同的 SpriteSheet 相同的代码。 一切都工作正常我会说90%的时间,但另外10%的精灵动画停留在 SpriteSheet 的一个帧上,在两个方向(左和右)上它一直保持卡住直到我关闭程序。 事情是我无法弄清楚为什么因为它永远不会在同一时刻发生..有时甚至在10,15,30秒之后甚至在开机时! 知道为什么吗? 在此先感谢您,如果您需要代码的任何其他部分,请告诉我
答案 0 :(得分:1)
您的代码可以通过这种方式重写:
ElapsedTimeFrame += (float) GameTime.ElapsedTime.TotalSeconds;
if (ElapsedTimeFrame >= TimePerFrame)
{
CurrentFrameR.X = (CurrentFrameR.X + 1) % SheetSizeR.X;
if (CurrentFrameR.X == 0)
{
CurrentFrameR.Y = (CurrentFrameR.Y + 1) % SheetSizeR.Y;
}
ElapsedTimeFrame-= TimePerFrame;
}
但你必须展示更多代码来猜测会发生什么......