Skip to main content
GameDev.net gamedev.net
🔒 Locked

Jumping blinking

Started by nullsquared Sep 5, 2005 at 6:28 PM 0 replies 700+ views
Original Post
nullsquared
nullsquared
Hi all! I made my first SDL game! I made mario and luigi jump, but at the end for some reason they blink?! I'm using Dev-CPP with C++. Heres my code:

#include <stdio.h>
#include <stdlib.h>
#include "SDL.h"
#include "SDL_image.h"

SDL_Surface *screen;

void Draw(int x, int y, SDL_Surface *sprite);

int main(int nArgs, char **args)
{
    Uint8* keys;
    
    bool falling = false, falling2 = false;
    
    SDL_Surface *bg;
    bool isRunning = true;
    
    int height = 383, width = 0;
    int height2 = 381, width2 = 780;

    SDL_Init(SDL_INIT_VIDEO);
    atexit(SDL_Quit);

    screen = SDL_SetVideoMode(800, 600, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
    if (screen == NULL)
        return 0;
        
    bg = IMG_Load("bg.bmp");
    if (bg == NULL)
        return 0;
        
    SDL_Surface *mario1;
    mario1 = IMG_Load("mario1.bmp");
    if (mario1 == NULL)
        return 0;
        
    SDL_Surface *mario2;
    mario2 = IMG_Load("mario2.bmp");
    if (mario2 == NULL)
        return 0;
        
    SDL_Surface *luigi1;
    luigi1 = IMG_Load("luigi1.bmp");
    if (luigi1 == NULL)
        return 0;
        
    SDL_Surface *luigi2;
    luigi2 = IMG_Load("luigi2.bmp");
    if (luigi2 == NULL)
        return 0;
        
    bool MARIO1 = true, LUIGI1 = false;
    bool LuigiJump = false, MarioJump = false;
    
    SDL_SetColorKey(mario1, SDL_SRCCOLORKEY, SDL_MapRGB(mario1->format, 0, 255, 255));
    SDL_SetColorKey(luigi1, SDL_SRCCOLORKEY, SDL_MapRGB(luigi1->format, 0, 255, 255));
    SDL_SetColorKey(mario2, SDL_SRCCOLORKEY, SDL_MapRGB(mario2->format, 0, 255, 255));
    SDL_SetColorKey(luigi2, SDL_SRCCOLORKEY, SDL_MapRGB(luigi2->format, 0, 255, 255));

    while(isRunning)
    {
        SDL_Event event;
        SDL_PollEvent(&event);

        switch (event.type)
        {
            case SDL_QUIT:
                isRunning = false;
            break;
            case SDL_KEYDOWN:
                 switch (event.key.keysym.sym)
                 {
                     case SDLK_ESCAPE:
                         isRunning = false;
                     break;
                 }
            break;
        }
        
        keys = SDL_GetKeyState(NULL);
        
        if (keys[SDLK_UP])
        {
            MarioJump = true;
        }
        if (keys[SDLK_DOWN]);
        if (keys[SDLK_LEFT]) 
        { 
            if (width > 0)
                width -= 5;
                
            MARIO1 = false;
        }
        if (keys[SDLK_RIGHT]) 
        { 
            if (width < 780)
                width += 5;
                
            MARIO1 = true;
        }
        
        if (keys[SDLK_KP8]) 
        { 
            LuigiJump = true;
        }
        if (keys[SDLK_KP5]);
        if (keys[SDLK_KP4]) 
        { 
            if (width2 > 0)
                width2 -= 4;
                
            LUIGI1 = false;
        }
        if (keys[SDLK_KP6]) 
        { 
            if (width2 < 780)
                width2 += 4;
                
            LUIGI1 = true;
        }
        
        SDL_FillRect(screen, 0, 0);
        
        Draw(0, 0, bg);
        
        if (MarioJump == false)
        {
            if (MARIO1)
                Draw(width, height, mario1);
            else
                Draw(width, height, mario2);
        }
        else
        {
            if (height > 301 && falling == false)
            {
                height -= 4;
                
                if (MARIO1)
                    Draw(width, height, mario1);
                else
                    Draw(width, height, mario2);
            }
            else
            {
                falling = true;
                if (height < 381)
                {
                    height += 4;
                    
                    if (MARIO1)
                        Draw(width, height, mario1);
                    else
                        Draw(width, height, mario2);
                }
                else
                {       
                    MarioJump = false;
                    falling = false;
                }
            }
        }
        
        if (LuigiJump == false)
        {    
            if (LUIGI1)
                Draw(width2, height2, luigi1);
            else
                Draw(width2, height2, luigi2);
        }
        else
        {
            if (height2 > 301 && falling2 == false)
            {
                height2 -= 4;
                
                if (LUIGI1)
                    Draw(width2, height2, luigi1);
                else
                    Draw(width2, height2, luigi2);
            }
            else
            {
                falling2 = true;
                if (height2 < 381)
                {
                    height2 += 4;
                    
                    if (LUIGI1)
                        Draw(width2, height2, luigi1);
                    else
                        Draw(width2, height2, luigi2);
                }   
                else
                {
                    LuigiJump = false;
                    falling2 = false;
                }
            }
        }
        
        SDL_Flip(screen);
    }
    
    SDL_FreeSurface(bg);
    SDL_FreeSurface(mario1);
    SDL_FreeSurface(luigi1);
    SDL_FreeSurface(mario2);
    SDL_FreeSurface(luigi2);

    return 0;
}

void Draw(int x, int y, SDL_Surface *sprite)
{
    SDL_Rect source;
    SDL_Rect dest;

    source.x = 0;
    source.y = 0;
    source.w = sprite->w;
    source.h = sprite->h;

    dest.x = x;
    dest.y = y;
    dest.w = source.w;
    dest.h = source.h;

    SDL_BlitSurface(sprite, &source, screen, &dest);

    return;
}


Thanks for any help, cuz I dont want them to blink like that always. The pics are simply 17x28 surfaces... there are four cuz its luigi in two directions and mario in two direction. Thanks in advance. EDIT: Fixed it by drawing the sprites after the else's execute. [Edited by - agi_shi on September 5, 2005 8:48:27 PM]

Topic Locked

This topic has been locked by a moderator. New replies are not allowed.

Sign in to reply to this topic.