【发布时间】:2014-03-10 18:37:09
【问题描述】:
我试图在我的 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 之后,它会产生很多错误和混乱!!
【问题讨论】:
-
SDL_RenderCopy/Load_Texture 返回什么?如果他们没有成功,SDL_GetError() 会告诉你什么?
-
很抱歉,如何显示错误?我以前没有用 Windows 应用程序调试过。如果有任何错误,我在哪里以及如何查看日志?
-
这是个奇怪的问题。我什么都试过了。只有第一个纹理被加载并显示在屏幕上,无论是任何图像。第二张图片无论是什么图片都没有成功加载!
-
在 C++ 编码时避免在成员名称前使用下划线,这些是为实现保留的!看这里:stackoverflow.com/questions/228783/…
-
@JimZilla 将其写入文件或分配控制台来显示错误。 SDL 还带有一个日志记录头 wiki.libsdl.org/CategoryLog