C# 用于WP7的XNA高速平滑动画

C# 用于WP7的XNA高速平滑动画,c#,windows-phone-7,animation,xna,sprite,C#,Windows Phone 7,Animation,Xna,Sprite,我的2d游戏有一个从上到下移动的精灵(沿Y+ve方向移动),它以30 fps的速度足够平滑,因为精灵的Y位置在每帧中增加1个像素(Y=Y+1px)。 现在的问题是,当我想高速移动精灵时,也就是说Y=Y+10px,运动看起来一点也不平滑,因为在每帧中加10px。 我想知道,我是否可以通过平滑的动画实现高速。不要使用基于帧的移动,如果游戏突然出现“打嗝”,那么玩家、敌人等不会“真实地”移动,而只是因为你的设备而变慢。我建议你使用基于时间的移动 现在我猜你有这样的想法: Update(GameTime

我的2d游戏有一个从上到下移动的精灵(沿Y+ve方向移动),它以30 fps的速度足够平滑,因为精灵的Y位置在每帧中增加1个像素(Y=Y+1px)。 现在的问题是,当我想高速移动精灵时,也就是说Y=Y+10px,运动看起来一点也不平滑,因为在每帧中加10px。
我想知道,我是否可以通过平滑的动画实现高速。

不要使用基于帧的移动,如果游戏突然出现“打嗝”,那么玩家、敌人等不会“真实地”移动,而只是因为你的设备而变慢。我建议你使用基于时间的移动

现在我猜你有这样的想法:

Update(GameTime aTime)
{
    mPlayer.Position += mPlayer.Direction;
}
现在考虑如果你的游戏运行在10fps,100fps或0 fps会发生什么。运动不一致,因此不流动。如果更改此选项,则移动将基于经过的时间,您将获得更加一致的动画,例如:

Update(GameTime aTime)
{
    mPlayer.Position += aTime.Milliseconds * (Constants.PlayerWalkSpeed * mPlayer.Direction);
}

最后,如果这不够平滑,你需要伪造它,比如添加运动模糊,这在2D中很容易做到。只需存储最后两个旧位置,并在这些位置以低于当前位置的alpha值绘制玩家精灵。

不要使用基于帧的移动,如果您的游戏突然出现“hickup”,您的玩家、敌人等不会“真实地”移动,而是因为您的设备而变慢。我建议你使用基于时间的移动

现在我猜你有这样的想法:

Update(GameTime aTime)
{
    mPlayer.Position += mPlayer.Direction;
}
现在考虑如果你的游戏运行在10fps,100fps或0 fps会发生什么。运动不一致,因此不流动。如果更改此选项,则移动将基于经过的时间,您将获得更加一致的动画,例如:

Update(GameTime aTime)
{
    mPlayer.Position += aTime.Milliseconds * (Constants.PlayerWalkSpeed * mPlayer.Direction);
}

最后,如果这不够平滑,你需要伪造它,比如添加运动模糊,这在2D中很容易做到。只需存储最后两个旧位置,并在这些位置以低于当前位置的alpha绘制玩家精灵。

可能重复@Arkain No Sir,我不想更改FPS速度,但要更改动画。而且它不平滑,因为必须每帧移动10像素。对吗?因此,增加帧速率将使其渲染更频繁,并使其更平滑,我缺少什么?@Arkain我的游戏动画是基于像素移动的,所以想知道这是一种方法吗?或者其他的解决方案。。。但我明白了。谢谢。最好的方法是使动画依赖于时间而不是fps,但提高刷新率会使其在任何情况下看起来更平滑,因为您不必移动精灵每帧像素数。可能重复@Arkain No Sir,我不想改变FPS的速度,但动画。它不是平滑的,因为你必须每帧移动10像素,对吗?因此,增加帧速率将使其渲染更频繁,并使其更平滑,我缺少什么?@Arkain我的游戏动画是基于像素移动的,所以想知道这是一种方法吗?或者其他的解决方案。。。但我明白了。谢谢。最好的方法是使动画依赖于时间而不是fps,但在任何情况下,提高刷新率都会使其看起来更平滑,因为您不必每帧移动多少像素的精灵。