在SDL中移动位图

时间:2014-02-02 23:46:50

标签: c++ sdl

我的图片无法加载有人可以告诉我为什么请? 当我按WASD时,我正在尝试更改偏移量,它将在Code :: Blocks中工作,但不能在.exe文件中工作。

#ifdef __cplusplus
    #include <cstdlib>
#else
    #include <stdlib.h>
#endif

#include <SDL/SDL.h>


int WIDTH = 800;
int HEIGHT = 600;

int main (int argc, char** argv)
{

    SDL_Init(SDL_INIT_EVERYTHING);

    SDL_Surface *screen = SDL_SetVideoMode(WIDTH, HEIGHT, 32, SDL_SWSURFACE|SDL_DOUBLEBUF);
    if (!screen){
        printf("Unable to set 800x600 video: %s\n", SDL_GetError());
        return 1;
    }
    SDL_WM_SetCaption("The Killer Of The Night Pre-Release 0.0.1", NULL);

    SDL_Surface *player = SDL_LoadBMP("lol.bmp");
    if (!player){
        printf("Unable to load the image here's the error: %s\n", SDL_GetError());
    }

    SDL_Rect offset;
    offset.x = 100;
    offset.y = 200;

    bool done = false;
    while (!done)
    {
        SDL_Event event;
        SDL_PollEvent(&event);

        if (event.type == SDL_QUIT)
        {
            done = true;
        }

        if (event.type == SDL_KEYDOWN)
        {
            switch(event.key.keysym.sym)
            {

            case SDLK_ESCAPE:

                done = true;
                break;

            case SDLK_w:
                offset.y -= 1;
                break;

            case SDLK_a:
                offset.x -= 1;
                break;

            case SDLK_s:
                offset.y += 1;
                break;

            case SDLK_d:
                offset.x += 1;
                break;

            }

        }



            SDL_FillRect(screen, 0, SDL_MapRGB(screen->format, 25,25,255));

            SDL_BlitSurface(player, 0, screen, &offset);

            SDL_Flip(screen);

    }



    return 0;
}

它在Code :: Blocks中工作正常,但是当我运行.exe文件时,它无效!?

2 个答案:

答案 0 :(得分:0)

您需要将lol.bmp放在包含exe的目录中。

在CodeBlocks中运行可执行文件时,工作目录是代码块项目文件(.cbp)的目录,这是lol.bmp所在的目录。您需要将该文件放在bin/Debug/文件夹或bin/Release/文件夹中,具体取决于您的构建目标。

答案 1 :(得分:0)

更多信息会很好,因为“它不起作用”并没有真正说明什么是失败的。例如,它是一个DLL错误,或者像之前声明的那样是lol.bmp不在正确的文件夹中。另外我相信SDL_Rect也需要高度和宽度。