0

SDL Game Libraryによって作成されたウィンドウが特定の時間後に自動的に閉じられるのはなぜですか。
その理由はSDL_Delay()関数であることはわかっていますが、その関数を使用しないと、ゲームにランタイム エラーが表示されます。

特定の期間に表示されずに継続的に機能するウィンドウを作成するにはどうすればよいですか?

私のコード(最も単純なコード):

SDL_Window *window;
SDL_Renderer *render;

int main(int argc, char* args[]){

   if(SDL_Init(SDL_INIT_EVERYTHING) >= 0){
      window = SDL_CreateWindow("Simple game", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 640, 480, SDL_WINDOW_SHOWN);
      if(window != 0){
         render = SDL_CreateRenderer(window, -1, 0);
      }

   }else{
      return 1;
   }

   SDL_SetRenderDrawColor(render, 0, 0, 0, 255);
   SDL_RenderClear(render);
   SDL_RenderPresent(render);

   SDL_Delay(3000);     
   SDL_Quit();

   return 0
}
4

1 に答える 1

2

永遠にループして、SDL 更新画面関数を呼び出す必要があります。ここにある LazyFoo のチュートリアルを読んでください: http://lazyfoo.net/SDL_tutorials

または、開始するための短いコードを次に示します。

#include <iostream>
#include "SDL/SDL.h"                    // basic SDL
#include <string>

const int       SCREEN_WIDTH    = 640;
const int       SCREEN_HEIGHT   = 480;
const int       SCREEN_BBP      = 32;   // bits per-pixel

SDL_Surface*    screen          = NULL; // display screen 
SDL_Event       event;                  // grab events


using namespace std;

bool init() {

    // initialize SDL
    if(SDL_Init( SDL_INIT_EVERYTHING ) == -1)
        return false;

    //the screen image
    screen = SDL_SetVideoMode(SCREEN_WIDTH, SCREEN_HEIGHT, 
                              SCREEN_BBP, SDL_SWSURFACE );
    if(!screen) {
        cout << "error creating screen" << endl;
        return false;
    }
    //Set the window caption 
    SDL_WM_SetCaption("Event Test", NULL );

    return true;
}

int main(int argc, char* argv[]) 
{   
    try
    {
        // make sure the program waits for a quit
        bool quit = false;

        cout << "Starting SDL..." << endl; 

        // Start SDL 
        if(!init()) {
            cout << "initialize error" << endl;
            return false;
        }

        // main loop
        while( quit == false )  
        {
            if (SDL_PollEvent(&event))  
            {                       
                // The x button click
                if(event.type == SDL_QUIT)  
                {
                    //quit the program
                    quit = true;
                }

            }

            // Fill the screen white 
            SDL_FillRect( screen, &screen->clip_rect, SDL_MapRGB( 
                screen->format, 0xFF, 0xFF, 0xFF ) );


            //Update screen
            if(SDL_Flip(screen) == -1)
                return -1;
        }
    }
    catch (exception& e)
    {
        cerr << "exception caught: " << e.what() << endl;
        return -1;
    }

    return 0;
}
于 2013-09-11T00:06:33.340 に答える