C++ 无法在SDL 2.0中加载多个纹理
我试图在SDL应用程序中加载多个纹理图像,但无法在屏幕上加载或渲染第二个图像。我只看到我的grass.bmp正在显示。无法加载Bob.bmp文件。我不知道错误在哪里,因为我已经正确地实现了一切 我的头文件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之后,它会产生很多错误和混乱 好的,你有两个问题 首
我看到的只是草.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));