C++ 无法在SDL 2.0中加载多个纹理

C++ 无法在SDL 2.0中加载多个纹理,c++,sdl,sdl-2,C++,Sdl,Sdl 2,我试图在SDL应用程序中加载多个纹理图像,但无法在屏幕上加载或渲染第二个图像。我只看到我的grass.bmp正在显示。无法加载Bob.bmp文件。我不知道错误在哪里,因为我已经正确地实现了一切 我的头文件 我看到的只是草.bmp。我无法渲染第二个图像。图像很好。我尝试用相同的grass.bmp代替bob.bmp进行调试,但仍然没有显示。只渲染第一个图像,而第二个不渲染!!希望有人能发现错误。我在SDL1.2中没有遇到任何问题,但是在切换到2.0之后,它会产生很多错误和混乱 好的,你有两个问题 首

我试图在SDL应用程序中加载多个纹理图像,但无法在屏幕上加载或渲染第二个图像。我只看到我的grass.bmp正在显示。无法加载Bob.bmp文件。我不知道错误在哪里,因为我已经正确地实现了一切

我的头文件


我看到的只是草.bmp。我无法渲染第二个图像。图像很好。我尝试用相同的grass.bmp代替bob.bmp进行调试,但仍然没有显示。只渲染第一个图像,而第二个不渲染!!希望有人能发现错误。我在SDL1.2中没有遇到任何问题,但是在切换到2.0之后,它会产生很多错误和混乱

好的,你有两个问题

首先。仔细查看
\u bobRect
初始化的最后一行。猜猜
\u bobRect.h
参数将具有什么值?(提示,它是0:)

第二,由于您在
\u bobTexture
上复制
\u grassTexture
,并且它更大,因此它将隐藏
\u bobTexture
,除非它是透明的。所以,改变顺序,让背景像这样先被复制

SDL_RenderCopy(_renderer,_grassTexture,NULL,&(_grassRect));
SDL_RenderCopy(_renderer,_bobTexture,NULL,&(_bobRect));

那你就没事了。

SDL\U RenderCopy/Load\U纹理返回什么?如果他们没有成功,SDL_GetError()会告诉你什么?很抱歉,我如何显示错误?我以前没有调试过windows应用程序。如果有任何错误,我在哪里以及如何查看日志?这是一个奇怪的问题。我什么都试过了。只有第一个纹理被加载并显示在屏幕上,无论它是任何图像。第二个映像无论是什么映像都无法成功加载!在C++中编码时避免在成员名称前面使用下划线,那些是为实现保留的!请参见此处:@JimZilla将其写入文件或分配控制台以显示错误。SDL还附带了一个日志头@Hjorthenify,我也花了一段时间,正要开始逐行调试时,我看到了它:pHoly,上帝之母。非常感谢你!我想我的程序到底出了什么问题?一切似乎都是对的,我看不出那一个愚蠢的错误。我正要切换回SDL1.2,我几乎花了一个小时试图找到错误,哈哈哈。再次感谢!
void GameWindow::LoadSprites(){
    _grassTexture = IMG_LoadTexture(_renderer,"grass.bmp");
    _grassRect.x = 0;
    _grassRect.y = 0;
    _grassRect.w = 600;
    _grassRect.h = 500;

    _bobTexture = IMG_LoadTexture(_renderer,"bob.bmp");
    _bobRect.x = 150;
    _bobRect.y = 150;
    _bobRect.w = 80;
    _bobRect.y = 50;
}
void GameWindow::Initialize(){
    if(SDL_Init(SDL_INIT_EVERYTHING) == -1)
        _running = false;
}
void GameWindow::SetupScreen(){
    _screen = SDL_CreateWindow("My Game Window",
                          100,
                          100,
                          640, 480,
                          SDL_WINDOW_SHOWN | SDL_WINDOW_RESIZABLE);

    if(_screen == NULL){
       _running = false;
    }
    _renderer = SDL_CreateRenderer(_screen,-1,SDL_RENDERER_ACCELERATED);
    GameWindow::LoadSprites();
}
void GameWindow::Update(){

}
void GameWindow::Render(){
    SDL_RenderClear(_renderer);
    SDL_RenderCopy(_renderer,_bobTexture,NULL,&(_bobRect));
    SDL_RenderCopy(_renderer,_grassTexture,NULL,&(_grassRect));

    SDL_RenderPresent(_renderer);
}
_bobRect.x = 150;
_bobRect.y = 150;
_bobRect.w = 80;
_bobRect.y = 50;
SDL_RenderCopy(_renderer,_grassTexture,NULL,&(_grassRect));
SDL_RenderCopy(_renderer,_bobTexture,NULL,&(_bobRect));