c++ - 我可以使用带有 SDL2 图像扩展名的 SDL-1.2.15 吗?

标签 c++ sdl sdl-2

我在代码块 12.11 中安装了 SDL 版本 1.2.15,当我尝试将它与 SDL2 图像扩展一起使用时,我遇到了某个问题。当我单击“运行”时,会弹出一个窗口并立即消失。我跟着此视频中的 sdl2-image 扩展安装说明 http://lazyfoo.net/SDL_tutorials/lesson03/windows/codeblocks/index.php .这就是我所做的 我将 sdl2-image 扩展名中 lib 下的所有文件传输到 codeblock 安装目录的 lib 文件夹下,所有文件包括 sdl2-image 扩展名的 i.e-sdl2 文件夹以包括代码块目录和 sdl2-lib 下的所有文件图像扩展到制作的程序的exe目录。 当我运行它时没有错误但是窗口出现并立即消失我的程序代码是

  #include "SDL/SDL.h"
  #include "SDL2/SDL_image.h"
  #include <string>

  //Screen attributes
  const int SCREEN_WIDTH = 640;
  const int SCREEN_HEIGHT = 480;
  const int SCREEN_BPP = 32;

  //The surfaces
  SDL_Surface *background = NULL;
  SDL_Surface *foo = NULL;
  SDL_Surface *screen = NULL;

 //The event structure
 SDL_Event event;

 SDL_Surface *load_image( std::string filename )
{
  //The image that's loaded
  SDL_Surface* loadedImage = NULL;

 //The optimized image that will be used
 SDL_Surface* optimizedImage = NULL;

 //Load the image
 loadedImage = IMG_Load( filename.c_str() );

 //If the image loaded
 if( loadedImage != NULL )
 {
     //Create an optimized image
     optimizedImage = SDL_DisplayFormat( loadedImage );

    //Free the old image
    SDL_FreeSurface( loadedImage );

    //If the image was optimized just fine
    if( optimizedImage != NULL )
    {
        //Map the color key
        Uint32 colorkey = SDL_MapRGB( optimizedImage->format, 0, 0xFF, 0xFF );

        //Set all pixels of color R 0, G 0xFF, B 0xFF to be transparent
        SDL_SetColorKey( optimizedImage, SDL_SRCCOLORKEY, colorkey );
     }
  }

  //Return the optimized image
  return optimizedImage;
 }

  void apply_surface( int x, int y, SDL_Surface* source, SDL_Surface* destination )
 {
  //Temporary rectangle to hold the offsets
  SDL_Rect offset;

 //Get the offsets
 offset.x = x;
 offset.y = y;

  //Blit the surface
  SDL_BlitSurface( source, NULL, destination, &offset );
 }

  bool init()
 {
  //Initialize all SDL subsystems
  if( SDL_Init( SDL_INIT_EVERYTHING ) == -1 )
 {
    return 1;
 }

 //Set up the screen
 screen = SDL_SetVideoMode( SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BPP, SDL_SWSURFACE );

 //If there was an error in setting up the screen
 if( screen == NULL )
 {
    return 1;
 }

 //Set the window caption
 SDL_WM_SetCaption( "Foo says \"Hello!\"", NULL );

 //If everything initialized fine
 return true;
}

bool load_files()
{
 //Load the background image
 background = load_image( "background.png" );

 //If the background didn't load
 if( background == NULL )
 {
     return false;
 }

 //Load the stick figure
 foo = load_image( "foo.png" );

 //If the stick figure didn't load
 if( foo == NULL )
 {
     return false;
 }

 return true;
}

void clean_up()
{
 //Free the surfaces
 SDL_FreeSurface( background );
 SDL_FreeSurface( foo );

 //Quit SDL
 SDL_Quit();
 }

  int main( int argc, char* args[] )
   {
  //Quit flag
  bool quit = false;

  //Initialize
  if( init() == false )
  {
      return 1;
  }

  //Load the files
  if( load_files() == false )
  {
    return 1;
  }

  //Apply the surfaces to the screen
   apply_surface( 0, 0, background, screen );
  apply_surface( 240, 190, foo, screen );

  //Update the screen
  if( SDL_Flip( screen ) == -1 )
  {
    return 1;
  }

  //While the user hasn't quit
  while( quit == false )
  {
      //While there's events to handle
     while( SDL_PollEvent( &event ) )
      {
        //If the user has Xed out the window
        if( event.type == SDL_QUIT )
        {
            //Quit the program
            quit = true;
        }
    }
    }

    //Free the surfaces and quit SDL
    clean_up();

   return 0;
  }   

是代码或安装过程有问题还是 sdl2-image-2.0.0 扩展与 sdl-1.2.15 不兼容?帮助

最佳答案

您需要使用旧版本的 SDL_Image 来自这里:http://www.libsdl.org/projects/SDL_image/release-1.2.html否则您将需要更新到 SDL2.0.1。我建议迁移到 SDL 2.0.1,因为它是一个更现代的图形库。

关于c++ - 我可以使用带有 SDL2 图像扩展名的 SDL-1.2.15 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21368573/

相关文章:

c++ - 同时移动乒乓 Racket

c++ - 使 SDL 调用纯虚成员函数作为事件回调?

c++ - 如何将一种类型的 unique_ptr 复制到另一种类型

c++ - 如何打印linux上进程拥有的所有线程的线程ID

c++ - 我可以在不使用嵌入式 while_loop 的情况下使用 SDL 检查事件吗?

python - 奇怪的 sdl 对无关窗口的副作用

c++ - 使用 sort() 进行降序而不是升序 C++

c++ - 检查 cmake 中顺序不正确的可选目标

c++ - 如何 "make"Linux 上的 SDL 项目?

c - 基本 C SDL2 程序不能与 TCC 一起工作,但它可以与 GCC (Linux) 一起工作