Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ SDL_LoadBMP()在引用曲面时显示黑色曲面_C++_Sdl - Fatal编程技术网

C++ SDL_LoadBMP()在引用曲面时显示黑色曲面

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;

尝试将图像加载到SDL_曲面上。但是,表面始终为黑色,尽管bmp显然不是

这是一个工作的SDL_窗口,创建曲面指针成功,但加载位于Code::Blocks项目文件夹中的“Kassadin.bmp”失败。它显示一个黑色的表面

在将此标记为重复之前,关于此特定问题的所有答案都没有解决此问题

  #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且没有错误,我会先刷新事件队列。