私はC++/SDL/OpenGLの2Dプラットフォームゲームのアニメーションに取り組んでいました。私のチームと私は、プレイヤーのすべてのアニメーション(ウォーキング、ランニングなど)は、私たちのコンセプトには異なるフレームレートが必要ですが、スムーズなアニメーションの例としてGame Programming All In Oneのガイドラインを使用し、ブックの推奨には動きを制限する変数がありますフレームの変更。私は私が私のSpriteクラスでこれらのパラメータを持っている意味を明確にするためにC++/SDL/OpenGLにおけるスムーズアニメーションのトラブル
:
それは同等かそれ以上になるまでベクトルdelayMovementSpriteはすべてのフレームに貴様のアニメーションやcountX増分のすべての値が含まれていstd::vector<Vector2f> delayMovementSprite;
std::vector<int> frameDelayPerAnimation;
GLfloat countX, countY;
値は、ベクトルdelayMovementSpriteに対応します。
このような何か:多くのような
Uint32 frameRate, oldTime;
int frameDelay;
int frameCount;
そして、私は次の操作を行いアニメーション化機能では、:
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;
}
}
そして、私は、以下の情報を処理するクラスのアニメーションを持っているフレームのスプライトの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です。 –
スムーズにしたい場合は、少し小さいです。 25fpsが最小です – crazyjul