2014-12-02 2 views
0

В последнее время я очень расстроен SDL2. Из вариантов здесь, так что смотрим с некоторой помощью от кого-то знающего. Я пытаюсь заставить эту черную работу работать в Windows 8.1. У меня не было проблем с использованием первого SDL на Windows 7, который прошел с легким ветром. Однако SDL2 - это не тот же случай.Ничего не происходит, когда программа запускается (и не создается Окно)

Я следую учебным пособиям по «http://lazyfoo.net/tutorials/SDL/01_hello_SDL/windows/codeblocks/index.php», используя самые последние обновленные кодовые блоки + выпуск minGW32. Я также пробовал это на Orwell Dev C++ + minGW32. Тем не менее, происходит что-то очень странное, чего я никогда не видел в программировании. Мой компилятор не дает мне никаких ошибок. Однако, когда программа запускается, ничего не происходит. Окно должно быть создано и отложено на несколько секунд. Я также попробовал учебник части 2, чтобы показать изображение, и снова ничего не происходит.

  • Я удостоверился, что ни одна из программ не заблокирована брандмауэром Windows и не запускала программу и .exe в качестве администратора.

  • Компилятор не дает ошибок.

  • SDL2.dll находится в папке .exe.

  • Я скачал SDL2.0.3 по ссылке на веб-сайте и загружены и применены исправления для этого один шаткий файл .h, который дает компилятор ошибки в SDL2.0.3 но не SDL2.0.0 загруженному в https://hg.libsdl.org/SDL/raw-file/e217ed463f25/include/SDL_platform.h

  • Я добавил папку lib и include в опции Compiler для SDL2.0.3.

  • Я добавил компоновщика строку: -lmingw32 -lSDL2main -lSDL2 (также попытался -lmingw32 -lSDL2 -lSDL2main и как 10 других вещей, найденных на форумах).

  • Я пробовал использовать как компиляторы Debug, так и Release.

  • Я попытался создать программу как приложение для графического интерфейса пользователя и консольное приложение. В SDL1 я скомпилирован как графическое приложение. В SDL2 этот просто компилируется, но при запуске он абсолютно ничего не делает. Когда бежал как консольное приложение, консоль окна всплывает, программа перестает отвечать на запросы, а затем консоль показывает процесс вышел после 6,357 секунд с возвращаемым значением 255.

Я следовал всем инструкциям в точности используя как Code :: Blocks, так и Dev C++ IDE, и я все равно ничего не получаю, такие же результаты. Работал в течение 2 дней. Что во имя Бога происходит, чтобы вызвать у меня весь этот стресс? Если у вас есть предложения или вы испытали эту трагедию, пожалуйста, помогите! T.T

Код очень простой, как показано:

//Using SDL and standard IO 
#include <SDL.h> 
#include <stdio.h> 

//Screen dimension constants 
const int SCREEN_WIDTH = 640; 
const int SCREEN_HEIGHT = 480; 

int main(int argc, char* args[]) 
{ 
    //The window we'll be rendering to 
    SDL_Window* window = NULL; 

    //The surface contained by the window 
    SDL_Surface* screenSurface = NULL; 

    //Initialize SDL 
    if(SDL_Init(SDL_INIT_VIDEO) < 0) 
    { 
     printf("SDL could not initialize! SDL_Error: %s\n", SDL_GetError()); 
    } 
    else 
    { 
     //Create window 
     window = SDL_CreateWindow("SDL Tutorial", 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()); 
     } 
     else 
     { 
      //Get window surface 
      screenSurface = SDL_GetWindowSurface(window); 

      //Fill the surface white 
      SDL_FillRect(screenSurface, NULL, SDL_MapRGB(screenSurface->format, 0xFF, 0xFF, 0xFF)); 

      //Update the surface 
      SDL_UpdateWindowSurface(window); 

      //Wait two seconds 
      SDL_Delay(2000); 
     } 
    } 

    //Destroy window 
    SDL_DestroyWindow(window); 

    //Quit SDL subsystems 
    SDL_Quit(); 

    return 0; 
} 

Это выход компилятор из Dev C++:

Compiling Project Changes... 
-------- 
- Project File: C:\Users\Giovanni\Desktop\test\GioGame\GioGame.dev 
- Compiler Name: MinGW GCC 4.8.1 32-bit Debug 

Building makefile... 
-------- 
- Filename: C:\Users\Giovanni\Desktop\test\GioGame\Makefile.win 
- Output File: C:\Users\Giovanni\Desktop\test\GioGame\GioGame.exe 

Processing makefile... 
-------- 
- Makefile Processor: C:\Program Files (x86)\Dev-Cpp\MinGW32\bin\mingw32-make.exe 
- Command: mingw32-make.exe -f "C:\Users\Giovanni\Desktop\test\GioGame\Makefile.win" all 

g++.exe -c 01_hello_SDL.cpp -o 01_hello_SDL.o -I"C:/Program Files (x86)/Dev-Cpp/MinGW32/include" -I"C:/Program Files (x86)/Dev-Cpp/MinGW32/mingw32/include" -I"C:/Program Files (x86)/Dev-Cpp/MinGW32/lib/gcc/mingw32/4.8.1/include" -I"C:/Program Files (x86)/Dev-Cpp/MinGW32/lib/gcc/mingw32/4.8.1/include/c++" -I"C:/Users/Giovanni/Desktop/test/SDL2.0.3/include/SDL2" -g3 

g++.exe 01_hello_SDL.o -o GioGame.exe -L"C:/Program Files (x86)/Dev-Cpp/MinGW32/lib" -L"C:/Program Files (x86)/Dev-Cpp/MinGW32/mingw32/lib" -L"C:/Users/Giovanni/Desktop/test/SDL2.0.3/lib" -static-libstdc++ -static-libgcc -lmingw32 -lSDL2main -lSDL2 -g3 


Compilation Results... 
-------- 
- Errors: 0 
- Warnings: 0 
- Output Size: 143.41796875 KiB 
- Compilation Time: 2.86s 

Наконец решена. Поскольку у меня было чувство, это была какая-то проблема с Windows или Windows 8.1, просто заставляя меня веселиться. Я был очень осторожен и перезагружен SDL2.0.3 и повторно применил эту вещь патча для SDL_platform.h. THEN Я полностью удалил ВСЕ из IDE, которые я пробовал, переустановил Dev C++ в режиме совместимости с Windows 7. Как администратор на рабочем столе (то есть не в Program Files x86). Затем я настраиваю все снова и бам, это сработало.

Может быть проблема с администратором ОС Windows 8.1 BS shenanigans или режимом совместимости, или с поврежденной загрузкой ранее, или с SDL, который я использовал, или даже с тем, что он был установлен для программных файлов x86, у которых есть пробел в файле путь и ограниченные права, потому что окна.

Так проблема: потому что окна.

+0

вы забыли опубликовать выходные данные своей программы ... вы также проверяете наличие ошибок после 'SDL_CreateWindow' –

+0

Как я могу опубликовать выходные данные своей программы? После компиляции и запуска, в буквальном смысле ничего не происходит, или если он установлен как консольная программа, он просто открывает консольный блок и перестает отвечать на запросы. У меня такое чувство, что с этим и с Windows 8 есть какая-то ужасная связь, и я не прав. – Giovanni

+0

@Giovanni Добавьте его в качестве ответа и примите его. Если у других такая же ошибка, они могут быстро найти решение. – Emz

ответ

0

Вы должны получить ошибку компилятора; ваши аргументы для SDL_CreateWindow переносятся.

SDL_CreateWindow("SDL Tutorial", SDL_WINDOWPOS_UNDEFINED, 
        SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN); 

Декларация:

SDL_Window * SDLCALL SDL_CreateWindow(const char *title, 
             int x, int y, int w, 
             int h, Uint32 flags); 

Вы пропускаете параметр y, должно быть:

SDL_CreateWindow("SDL Tutorial", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 
        SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN);` 
+0

Ahh Мне понравился ошибочный код откуда-то еще. Код, который я хочу связать, правильно отформатирован. Я хочу связать его снова, но есть лимит символов для ответов, но не вопросы, которые я предполагаю. Ошибка компилятора была повторена после попытки перекомпиляции. – Giovanni

+0

Когда я исправил эту строку, окно появилось для меня. Если вы все еще испытываете проблемы, это не связано с кодом. – mukunda

+0

Вы можете нажать кнопку «Изменить» под своим сообщением, чтобы внести исправления в свои пасты. – mukunda

3

Вопрос заключается в том, что вы никогда не позволяя окна ввода событий петлю. Учебник, который вы читаете, предполагает, что окно будет отображаться без обработки событий, что не произойдет на всех платформах.

Просто делать SDL_Delay(2000); будет просто спать в течение 2 секунд, но это не позволит потоку обрабатывать события тем временем.

Если вы замените, что одна линия с

 SDL_Event e; 
     bool quit=false; 
     while(!quit) 
     { 
      while(SDL_PollEvent(&e) != 0) 
      { 
       if(e.type == SDL_QUIT) 
       { 
        quit = true; 
       } 
      } 
     } 

Это будет прекрасно работать (хотя он занят ожидания, но вы можете заботиться об этом позже)

1

Наконец решена. Поскольку у меня было чувство, это была какая-то проблема с Windows или Windows 8.1, просто заставляя меня веселиться. Я был очень осторожен и перезагрузил SDL2.0.3 и повторно применил эту вещь исправления для SDL_platform.h. THEN Я полностью удалил ВСЕ IDE, которые я пытался, переустановил Dev C++ в режиме совместимости с Windows 7. Как администратор на рабочем столе (то есть не в Program Files x86). Затем я настраивал все снова и работал на нем.

Может быть проблема с администратором ОС Windows 8.1 BS shenanigans или режимом совместимости, или с поврежденной загрузкой ранее, или с SDL, который я использовал, или даже с тем, что он был установлен для программных файлов x86, у которых есть пробел в файле путь и ограниченные права, потому что окна.

Так проблема: потому что окна.

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