Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在SDL中移动位图_C++_Sdl - Fatal编程技术网

C++ 在SDL中移动位图

C++ 在SDL中移动位图,c++,sdl,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, ch

我的图像无法加载,有人能告诉我为什么吗? 我试图在按下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;
}
\ifdef\uuucplusplus
#包括
#否则
#包括
#恩迪夫
#包括
整数宽度=800;
内部高度=600;
int main(int argc,字符**argv)
{
SDL_Init(SDL_Init_EVERYTHING);
SDL_表面*屏幕=SDL_设置视频模式(宽度、高度、32,SDL_表面| SDL_双BUF);
如果(!屏幕){
printf(“无法设置800x600视频:%s\n”,SDL_GetError());
返回1;
}
SDL_WM_SetCaption(“0.0.1版前的夜间杀手”,空);
SDL_Surface*player=SDL_LoadBMP(“lol.bmp”);
如果(!玩家){
printf(“无法加载图像,错误为:%s\n”,SDL_GetError());
}
垂直偏移量;
偏移量x=100;
偏移量y=200;
bool done=false;
而(!完成)
{
SDL_事件;
SDL_PollEvent(事件和事件);
if(event.type==SDL\u QUIT)
{
完成=正确;
}
if(event.type==SDL\u KEYDOWN)
{
开关(event.key.keysym.sym)
{
案例SDLK_逃生:
完成=正确;
打破
案例SDLK\U w:
偏移量y-=1;
打破
案例SDLK_a:
偏移量x-=1;
打破
案例SDLK_s:
偏移量y+=1;
打破
案例SDLK\U d:
偏移量x+=1;
打破
}
}
SDL_FillRect(屏幕,0,SDL_映射RGB(屏幕->格式,25,25255));
SDL_BlitSurface(播放器、0、屏幕和偏移);
SDL_翻转(屏幕);
}
返回0;
}

它在代码::块中工作正常,但当我运行.exe文件时,它不工作

您需要将
lol.bmp
与exe一起放入目录中


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

更多信息会更好,因为“它不工作”并不能真正说明失败的地方。例如,它是一个dll错误,或者像前面所说的lol.bmp不在正确的文件夹中。此外,我认为SDL\u Rect还需要一个高度和宽度。

确保所有图像文件都与可执行文件位于同一目录中。