0

私はSDLを初めて使用します。ウィンドウに画像を追加しようとしていますが、このチュートリアルに従っています: http://lazyfoo.net/SDL_tutorials/lesson02/index.php

すべてのコードを xcode で実行していますが、実行するとウィンドウが読み込まれません。私はただひらめき、消えてしまいます。これは私のコードです:

const int SCREEN_WIDTH = 640;
const int SCREEN_HEIGHT = 480;
const int SCREEN_BPP = 32;

SDL_Surface *message = NULL;
SDL_Surface *background = NULL;
SDL_Surface *screen = NULL;

SDL_Surface *load_image(std::string filename)
{
    SDL_Surface *loadedImage = NULL;
    SDL_Surface *optimizedImage = NULL;

    loadedImage = SDL_LoadBMP( filename.c_str() );

    if (loadedImage != NULL)
    {
        optimizedImage = SDL_DisplayFormat(loadedImage);
        SDL_FreeSurface(loadedImage);

    }

    return optimizedImage;
}

void apply_surface(int x, int y, SDL_Surface *source, SDL_Surface *destination)
{
    SDL_Rect offset;

    offset.x = x;
    offset.y = y;

    SDL_BlitSurface(source, NULL, destination, &offset);
}



int main( int argc, char* args[] )
{
    //Start SDL
    SDL_Init( SDL_INIT_EVERYTHING );

    //Quit SDL
    SDL_Quit();

    if (SDL_Init(SDL_INIT_EVERYTHING)==-1)
    {
        return 1;
    }

    screen = SDL_SetVideoMode(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BPP, SDL_SWSURFACE);

    if (screen == NULL)
    {
        return 1;
    }

    SDL_WM_SetCaption("Hellow world!", NULL);

    message = load_image("images.bmp");
    background = load_image("images.bmp");

    apply_surface(0, 0, background, screen);

    apply_surface(180, 140, message, screen);

    return 0;

}

4

2 に答える 2

1

SDL_Quit()メイン関数で時期尚早に呼び出しています。この関数はすべての SDL サブシステムをシャットダウンするため、代わりにプログラムの最後で呼び出す必要があります。

明示的に閉じるまでウィンドウを残しておきたい場合は、次のようなループを追加します。

int main() {
  if (SDL_Init(SDL_INIT_EVERYTHING) == -1) {
    return 1;
  }

  screen = SDL_SetVideoMode(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BPP, SDL_SWSURFACE);
  if (!screen) {
    return 1;
  }

  bool running = true;

  SDL_Event event;
  while (running) {
    while (SDL_PollEvent(&event)) {
      if (event.type == SDL_QUIT) {
        running = false;
      }
    }
  }

  SDL_Quit();
  return 0;
}

ウィンドウが閉じられたときなど、何らかのイベントが発生したときに running を false に設定できます。

于 2013-06-07T09:28:38.667 に答える
-1

SDL_Quit(); を入れました。あなたのプログラムの最初に。これは、return 0 を入れるようなものです。すべてのコードの前に。その行を読み取るとシャットダウンします。これを回避するには、ウィンドウの上部にある「x」が押されたときに中断するループを作成する必要があります。

于 2013-09-15T18:21:01.583 に答える