I'm doing it like this: I've got a sprite sheet with 6 frames of a dude walking. I take an SDL_Rect and use it "cut" the frames out of the image and display them one after the other. Couldn't sound simpler and when I got it working and saw how ridiculously quickly he was animating I thought "that's ok, I'll fix it in a minute".

6 hours later and I've still got it wanked.

For the life of me I can't figure it out. Each object has a HandleInput() function which takes one arg, the time difference between the last frame and the current one. I'm using this value to move but I've got no idea how to use it to get my animation to sync (or whatever).

Here's my HandleInput for the said sprite:

Code:
void TL_Vamp::HandleInput(int dT)
{
    _sendableMessage._id = M_MOVE;
    _sendableMessage._arg1 = MOVE_LEFT;
    _sendableMessage._arg2 = dT;

    if (InputHandler::GetSingleton().KeyStillDown(SDLK_d)) {
        _currentFrame++;
        _srcRect.x += 55;

        if (_currentFrame >= 6) {
            _currentFrame = 0;
            _srcRect.x = 0;
        }

        if (canMoveForward) {
            _dstRect.x += dT;
        }

        if (_dstRect.x > (GameSystem::GetScreenWidth() / 2) - 55) {
            GameSystem::FireMessage(&_sendableMessage, GameSystem::GetObjectByName(std::string("TL_Background")));
            canMoveForward = false;
        }

        canMoveBack = true;
    }

    if (InputHandler::GetSingleton().KeyStillDown(SDLK_a)) {
        if (canMoveBack) _dstRect.x -= 2;
        if (_dstRect.x < 20) canMoveBack = false;

        canMoveForward = true;
    }
}
Just ignore everything else for now.
Everything I find online is about as clear as mud to me and my humble -Z in mathematics.