SDL 2 BMP Блиттинг

В настоящее время я изучаю, как использовать SDL 2. Используя учебное пособие Lazy Foo' SDL2, показанное здесь, я создал скрипт, который должен отображать изображение в течение 2 секунд перед закрытием программы. Вот сценарий:

#include <SDL.h>
#include <stdio.h>

//Screen dimensions
const int SCREEN_WIDTH = 640;
const int SCREEN_HEIGHT = 480;

SDL_Window* window = NULL;

SDL_Surface* screenSurface = NULL;

SDL_Surface* surfaceImage = NULL;

bool init();

bool loadMedia();

void close();

bool init()
{
    bool success = true;
    //initializes
    if( SDL_Init( SDL_INIT_VIDEO ) < 0 )
    {
        printf( "SDL could not initialize! SDL_Error: %s\n", SDL_GetError() );
        success = false;
    }
    else{
    //creates the window
        window = SDL_CreateWindow("Testing!", 100, 100, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN);
        if( window = NULL )
        {
            printf( "SDL could not initialize! SDL_Error: %s\n", SDL_GetError() );
            success = false;
        }
        else
        {
            screenSurface = SDL_GetWindowSurface(window);
        }
    }

    return success;

}

bool loadMedia()
{
    bool success = true;
    surfaceImage = SDL_LoadBMP( "test.bmp" );
    if(surfaceImage = NULL)
    {
        printf(SDL_GetError());
        success = false;
    }

    return success;
}

void close()
{
    SDL_DestroyWindow(window);
    window = NULL;
    SDL_Quit();
}

int main( int argc, char* args[] )
{
    if(!init())
    {
        printf( "Failed to initialize!\n" );
    }
    else{
        SDL_FillRect(screenSurface, NULL, ( screenSurface->format, 0xFF, 0xFF, 0xFF ));
        if(!loadMedia())
        {
            printf(SDL_GetError());
        }
        else{

            SDL_BlitSurface(surfaceImage, NULL, screenSurface, NULL);
            SDL_UpdateWindowSurface(window);
        }

        SDL_Delay(2000);
        close();
        return 0;
    }
    return 0;
}

Однако изображение не отображается. Никаких ошибок не появлялось, программа работала как надо, только изображения не было. У меня есть файл bmp в том же каталоге, что и файл vcproj. Что не так с кодом?


person GameandWatchgreen    schedule 11.03.2015    source источник


Ответы (1)


Исправьте две строки кода:

Изменить if(window = NULL) на if(window == NULL)

и

if(surfaceImage = NULL) to if(surfaceImage == NULL).

Это очень распространенная ошибка — вы почти всегда имеете в виду второе, но верно и первое, хотя оно означает совсем другое. Стратегия, позволяющая избежать повторения той же ошибки в будущем, состоит в том, чтобы выработать привычку изменять порядок операндов в if:

if(NULL == window) работает и эквивалентно if(window == NULL), но if(NULL = window) является ошибкой компилятора, так что если вы ее допустили, вас немедленно уведомят о вашей ошибке.

person logan_____    schedule 11.03.2015
comment
Ах да, я забыл, что == это вещь. Прошло много времени с тех пор, как я в последний раз что-то программировал. Спасибо! - person GameandWatchgreen; 11.03.2015