我尝试在 SDL 应用程序中加载多个纹理图像,但无法在屏幕上加载或渲染第二个图像。我所看到的只是显示我的grass.bmp。无法加载 Bob.bmp。我不知道错误可能出在哪里,因为我已经正确实现了所有内容
My header file
#include <SDL.h>
#include <SDL_image.h>
#ifndef GAMEWINDOW_H
#define GAMEWINDOW_H
class GameWindow{
private:
bool _running;
SDL_Window* _screen;
SDL_Renderer* _renderer;
SDL_Texture* _grassTexture;
SDL_Texture* _bobTexture;
SDL_Rect _grassRect;
SDL_Rect _bobRect;
......
my .cpp file
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);
}
我看到的只是草.bmp。我无法渲染第二张图像。图像很好。我尝试使用相同的gras.bmp 代替bob.bmp 进行调试,但它仍然不显示。仅渲染第一张图像,而第二张图像则不渲染!希望有人能发现错误。我在 SDL 1.2 中没有遇到任何问题,但在切换到 2.0 后,它产生了很多错误和困惑!!
最佳答案
好的,您有两个问题。
首先。仔细查看_bobRect
初始化的最后一行。猜猜_bobRect.h
参数的值是什么? (提示,它是 0 :)
_bobRect.x = 150;
_bobRect.y = 150;
_bobRect.w = 80;
_bobRect.y = 50;
其次,由于您将 _grassTexture
复制到 _bobTexture
之上,并且它较大,因此它会隐藏 _bobTexture
,除非它是透明的。因此,更改顺序,以便首先复制背景,如下所示
SDL_RenderCopy(_renderer,_grassTexture,NULL,&(_grassRect));
SDL_RenderCopy(_renderer,_bobTexture,NULL,&(_bobRect));
那你应该没问题。
关于c++ - 无法在 SDL 2.0 中加载多个纹理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22295920/