2015-05-10 2 views
2

Окно закрывается, как только я запускаю программу. это основная функция:Окно SDL закрывается при запуске и возвращает 0

int main(int argc, char* argv[]) 
{ 
    if (!init()) 
    { 
     printf("Could not initialize!"); 
    } 
    else 
    { 
     bool quit = false; 
     SDL_Event ev; 

     while(!quit) 
     { 
      while(SDL_PollEvent(&ev)) 
      { 
       if(ev.type = SDL_QUIT) 
       { 
        quit = true; 
       } 
      } 
     } 
    } 
    close(); 
    return 0; 
} 

Добавление Е() заявления сузили этот раздел

while(SDL_PollEvent(&ev)) 
{ 
    if(ev.type = SDL_QUIT) 
    { 
     quit = true; 
    } 
} 

Если я изменить while(SDL_PollEvent(&ev)) к while(!SDL_PollEvent(&ev)) или while(SDL_PollEvent(&ev) != 0) окно остается открытым, но закрывается, как только я наведите курсор мыши на нее или попробуйте переместить ее.

the SDL documentation говорит, что SDL_PollEvent только возвращает 1 (истина), если есть отложенный событие, и, так как программа возвращает 0, похоже SDL_PollEvent должно быть возвращено 1 как-то и что ev.type был установлен SDL_QUIT без нажатия кнопки X , что я считаю маловероятным. Поэтому я, вероятно, сделал что-то не так, но я не могу понять, что это такое, и я пытался найти решение.

Также здесь функция init().

bool init() 
{ 
    bool success = true; 
    if(SDL_Init(SDL_INIT_VIDEO) < 0) 
    { 
     printf("SDL failed to initialize! SDL Error: %s\n", SDL_GetError()); 
     success = false; 
    } 
    else 
    { 
     window = SDL_CreateWindow("Image Encrypter", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 
            SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN); 
     if(window == NULL) 
     { 
      printf("Window could not be created! SDL Error: %s\n", SDL_GetError()); 
      success = false; 
     } 
     else 
     { 
      screenSurface = SDL_GetWindowSurface(window); 
      if(screenSurface == NULL) 
      { 
       printf("Screen surface could not be created! SDL Error: %s\n", SDL_GetError()); 
      } 
     } 
    } 
    return success; 
} 

консоль не выводит какой-либо из PRINTF операторов в функции инициализации(), так что я не думаю, что это где проблема.

ответ

0

Распространенная ошибка здесь:

if(ev.type = SDL_QUIT) 

- это присваивание, а не сравнение. Тогда будет работать первая версия вашего кода.

Смежные вопросы