Ik heb vandaag een simpele vos-animatie geprogrammeerd voor in mijn platformer-spel waar ik aan werk. Het gaat als volgt: de vos begint op een x-positie, en middels een counter wordt die x-positie met de snelheid van de vos verdubbeld. Zodra de counter een bepaalde waarde heeft bereikt, stopt de heen-animatie en begint de terug-animatie. In dat geval telt hij de counter met de snelheid maal 2 af. Totdat hij weer zijn begin positie heeft bereikt.

Makkelijk, niet?

Code:

core.m_fox.x = foxCount;
SDL_RenderCopyEx(m_renderer, core.m_FoxTexture, NULL, &core.m_fox, 0, 0, SDL_FLIP_NONE);

foxCount += foxSpeed;
if (collision(&core.m_fox, &core.m_player)) {
    foxCount -= foxSpeed;
}

if (foxCount > foxPath) {
    foxAnim = true;
}

if (foxAnim) {
    foxCount -= foxSpeed * 2;
    if (collision(&core.m_fox, &core.m_player)) {
        foxCount += foxSpeed;
    }
    if (foxCount < 0) {
        foxAnim = false;
    }
}

 

Springen heb ik zo gedaan (excuus voor de shitty, spaghetti-code):

case SDLK_UP:
    if (gamestate == STATE_MENU) menu.goUp();
    if (core.m_player.y == core.ground_level) core.player_vely = -core.jumpSpeed;
    core._jump = true;
    core.keystates[core.up] = true;
    break;

// Jumping animation
if (core._jump) {
    core.player_vely += 1;
    core.m_player.y += core.player_vely;
    std::cout << "jumping..." << std::endl;
    core.ground_level = screen_height - core.m_player.h;
    if (core.m_player.y > core.ground_level) {
        core.player_vely = 0;
        core.m_player.y = core.ground_level;

        core._jump = false;
        std::cout << "jumping done" << std::endl;
    }
}

Note: ik heb expres de code weggelaten die controleert of hij op een blok, een cell springt, omdat dat hierin niet relevant is. De collision detection is gemaakt m.b.v. het bounding box algorithme.