C++ SDL_LoadBMP()在引用曲面时显示黑色曲面
尝试将图像加载到SDL_曲面上。但是,表面始终为黑色,尽管bmp显然不是 注 这是一个工作的SDL_窗口,创建曲面指针成功,但加载位于Code::Blocks项目文件夹中的“Kassadin.bmp”失败。它显示一个黑色的表面 在将此标记为重复之前,关于此特定问题的所有答案都没有解决此问题C++ SDL_LoadBMP()在引用曲面时显示黑色曲面,c++,sdl,C++,Sdl,尝试将图像加载到SDL_曲面上。但是,表面始终为黑色,尽管bmp显然不是 注 这是一个工作的SDL_窗口,创建曲面指针成功,但加载位于Code::Blocks项目文件夹中的“Kassadin.bmp”失败。它显示一个黑色的表面 在将此标记为重复之前,关于此特定问题的所有答案都没有解决此问题 #include <iostream> #include <SDL.h> #include <stdio.h> using namespace std;
#include <iostream>
#include <SDL.h>
#include <stdio.h>
using namespace std;
const int SCREEN_WIDTH = 700;
const int SCREEN_HEIGHT = SCREEN_WIDTH / 12 * 9;
//Create an SDL_Window pointer
SDL_Window* window = NULL;
//Create an SDL_Surface pointer
SDL_Surface* surface = NULL;
//SDL_Surface for an image
SDL_Surface* imgSurface = NULL;
bool init(){
//try init SDL
if(SDL_Init(SDL_INIT_VIDEO) < 0){
cout << "Failed init SDL" << endl;
return false;
}else{
//create window title x pos y pos width height flags
//This doesnt include a surface ie it will be a plain window
window = SDL_CreateWindow("An SDL Window", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN);
}
if(window == NULL){
cout << "Failed creating SDL window" << endl;
return false;
}else{
// creates surface with an SDL_Window object
surface = SDL_GetWindowSurface(window);
}
return true;
}
bool loadMedia(){
imgSurface = SDL_LoadBMP("Kassadin.bmp");
return true;
}
void close(){
//Sets the SDL_Window pointer to NULL again
SDL_DestroyWindow(window);
window = NULL;
SDL_FreeSurface (imgSurface);
imgSurface = NULL;
//quits
SDL_Quit();
}
int main(int argc, char* argv[]){
if(!init()){
cout << "error init sdl" << endl;
}else{
if(!loadMedia){
cout << "Trouble loading media..." << endl;
}else{
SDL_BlitSurface(imgSurface, NULL, surface, NULL);
}
}
//This is so it's not just a static window ie it can update
SDL_UpdateWindowSurface(window);
SDL_Delay(5000);
close();
return 0;
}
#包括
#包括
#包括
使用名称空间std;
屏幕宽度=700;
屏幕高度=屏幕宽度/12*9;
//创建SDL_窗口指针
SDL_Window*Window=NULL;
//创建SDL_曲面指针
SDL_Surface*Surface=NULL;
//图像的SDL_曲面
SDL_表面*imgSurface=NULL;
boolinit(){
//尝试初始化SDL
if(SDL_Init(SDL_Init_视频)<0){
cout问题线是
if(!loadMedia){
它不是函数调用。它所做的是检查函数loadMedia
的地址是否为空,这总是错误的,因为链接器分配的函数地址(与运行时手动分配的函数指针相反)
正如您提到的代码块,我认为您使用gcc来编译代码。如果您至少添加了-Wall
标志(这是一个非常好的实践),编译器会警告您正在做一些看起来非常错误的事情:
test2.cpp:70:9: warning: the address of ‘bool loadMedia()’ will always evaluate as ‘true’ [-Waddress]
修复了语法错误,但仍返回blacCannot reproduction。然后在Blit之前(或在调试器中检查)输出imgSurface
值和SDL_GetError()
.Event循环会很好,但这里似乎没有问题,不过如果指针为非null且没有错误,我会先刷新事件队列。