我一直在C++/SDL/OpenGL中进行2D平台游戏的动画工作,我和我的团队达到了需要确定播放器的每个动画(走路,跑步等)需要一个不同的帧速率用于我们的概念,但是我使用游戏编程一体机作为流畅动画的示例,并且在书中建议有限制移动的变量和帧的变化。在C++/SDL/OpenGL中使用平滑动画时遇到的问题
为了澄清我的意思是我在我的Sprite类,这些参数:
std::vector<Vector2f> delayMovementSprite;
std::vector<int> frameDelayPerAnimation;
GLfloat countX, countY;
凡载体delayMovementSprite包含了型动物动画和countX增量在每帧中的所有值,直到它等于或大于大在向量delayMovementSprite中对应的值。
事情是这样的:
void Sprite::movePosXWithSpeed()
{
playerMoveInX = false || playerMoveInX;
countX++;
if (countX > delayMovementSprite.at(getCurrentState()).x)
{
countX = 0;
if (handlerAnimation->getAnimationDirection() == SpriteData::RIGHT)
{
if (position.x + getSpeedX() + width < 6368.f)
{
position.x += getSpeedX();
playerMoveInX = true;
return;
}
}
else if (position.x + getSpeedX() + width > 0)
{
position.x += getSpeedX();
playerMoveInX = true;
return;
}
playerMoveInX = false;
}
}
而对于我有一个类动画它处理以下信息框:
Uint32 frameRate, oldTime;
int frameDelay;
int frameCount;
而且在动画我这样做,很像功能Sprite中的MoveX:
int Animation::animate()
{
if(oldTime + frameRate > SDL_GetTicks())
{
return -1;
}
oldTime += frameRate;
frameCount++;
if (frameCount > frameDelay)
{
animationAlreadyEnd = false;
frameCount = 0;
currentFrame += incrementFrame;
if(currentFrame > maxFrames)
{
animationAlreadyEnd = true;
currentFrame = returnFrame;
}
}
return currentFrame;
}
我开始工作了,所有的东西都执行了显然很好,但在游戏的某些部分,动画在其他点上看起来并不平坦。
我离开了“游戏”的视频,所以每个人都可以看到我的意思。
http://www.youtube.com/watch?v=uoxKEYzwkcQ
我的游戏的执行在60 FPS的通用定时器中目前使用的。
如果有人需要更多信息,请不要犹豫。
你有什么最小的动画帧率? – crazyjul
最小的动画帧速率适用于步行运动,速度为15 FPS。 –
如果你想要光滑的东西,这有点小。最低为25 fps – crazyjul