我正在尝试在我的SDL应用中加载多个纹理图像,但我无法在屏幕上加载或渲染第二个图像。我只看到我的grass.bmp正在显示。无法加载Bob.bmp。我不知道错误在哪里,因为我已经正确实施了所有内容
我的头文件
#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;
......
我的.cpp文件
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);
}
我所看到的只是grass.bmp。我无法渲染第二张图片。图像很好。我尝试使用相同的grass.bmp代替bob.bmp调试,但它仍然没有显示。只有第一个图像被渲染而第二个图像没有被渲染!希望有人能发现错误。我在SDL 1.2中没有遇到任何问题,但在切换到2.0之后会产生很多错误和混乱!!
答案 0 :(得分:3)
好的,你有两个问题。
首先。仔细查看_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));
然后你应该没事。