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

时间:2014-03-10 09:06:45

标签: c++ sdl sdl-2

我正在尝试在我的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之后会产生很多错误和混乱!!

1 个答案:

答案 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));

然后你应该没事。