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

标签 c++ sdl sdl-2

我尝试在 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/

相关文章:

C++ 'ClassName Not Declared' 错误

c++ - 遍历 map<string, string> 并使用 SDL_TTF 绘制其内容时出现段错误

c++ - 在 FPS 风格游戏中使用鼠标输入时运动意外加速

sdl-2 - SDL2_混音器 : Mix_Init unnecessary for statically-linked audio libraries?

c++ - 文档中 SDL Mix_HookMusic 说明中的 &ff 是什么

c++ - 将项目添加到 CTreetrl C++

C++ 如何#define/重命名嵌套函数?

c++ - std::forward 和复制构造函数

ubuntu - 使用 sdl 中的 SDL_SetWindowOpacity 使窗口透明

c++ - SDL2 窗口/表面的解释?