2014-12-02 2 views
0

최근에 나는 SDL2에 매우 좌절감을 느낍니다. 여기 옵션이 없으므로 지식이있는 사람의 도움을 찾고 있습니다. 이 창고를 Windows 8.1에서 작동 시키려고합니다. Windows 7에서 처음으로 SDL을 사용하는 데는 아무런 문제가 없었습니다. 그러나 SDL2는 같은 경우가 아닙니다.프로그램이 실행될 때 아무런 반응이 없습니다 (창문이 만들어지지 않습니다)

가장 최근에 업데이트 된 코드 블록 + minGW32를 사용하여 "http://lazyfoo.net/tutorials/SDL/01_hello_SDL/windows/codeblocks/index.php"의 자습서를 따르고 있습니다. 나는 Orwell Dev C++ + minGW32에서도 시도했다. 그러나 아주 이상한 일이 일어나고 있습니다. 프로그래밍에서 본 적이없는 무언가가 있습니다. 컴파일러가 오류를주지 않습니다. 그러나 프로그램이 실행될 때 아무 일도 일어나지 않습니다. 창은 몇 초 동안 생성되고 지연되어야합니다. 또한 이미지를 표시하기 위해 파트 2 자습서를 시도했지만 다시는 아무 일도 일어나지 않습니다.

  • 어느 프로그램도 Windows 방화벽에 의해 차단되지 않았으며 프로그램과 .exe가 관리자 권한으로 실행되었는지 확인했습니다.

  • 컴파일러에서 오류가 발생하지 않습니다.

  • SDL2.dll은 .exe 폴더에 있습니다.

  • 나는 웹 사이트에있는 링크에서 SDL2.0.3를 다운로드 다운로드 SDL2.0.3에 컴파일러 오류를 제공하지만 https://hg.libsdl.org/SDL/raw-file/e217ed463f25/include/SDL_platform.h

    에서 다운로드 SDL2.0.0되지 하나 개 남았습니다 .H 파일에 대한 수정 프로그램을 적용한
  • SDL2.0.3의 컴파일러 옵션에 lib 및 include 폴더를 추가했습니다.

  • 내가 링커 문자열을 추가했습니다 : -lmingw32 -lSDL2main -lSDL2를 (또한 -lmingw32 -lSDL2 -lSDL2main 시도와 같은 다른 10 가지 포럼에 있음).

  • Debug 및 Release 컴파일러를 모두 사용해 보았습니다.

  • GUI 응용 프로그램과 콘솔 응용 프로그램으로 프로그램을 빌드 해 보았습니다. SDL1에서는 GUI 애플리케이션으로 컴파일되었습니다. SDL2에서이 은 간단히 컴파일되지만 실행하면 절대적으로 아무것도하지 않습니다. 콘솔 응용 프로그램으로 을 실행하면, 콘솔 창, 응답하지 프로그램을 팝업하고 콘솔 프로세스 내가 정확하게 모든 지시를 따랐습니다 255

반환 값 6.357 초 후에 종료 표시 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; 
} 

이 데브 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에 해당 패치를 다시 적용했습니다. 내가 완전히 시도한 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); 

선언 : 당신은 y 매개 변수를 누락

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

,해야한다 :

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에 해당 패치를 다시 적용했습니다. 그런 다음 내가 시도한 모든 IDE를 완전히 제거하고 Dev C++를 Windows 7 호환 모드로 다시 설치합니다 (예 : Program Files x86이 아님). 그런 다음, 모든 것을 다시 설정하고 작동 시켰습니다.

Windows 8.1 관리자 BS shenanigans, 호환성 모드 또는 이전에 손상된 파일이나 내가 사용하고있는 SDL 또는 파일에 공간이있는 x86 파일을 설치하기 위해 설치되었다는 사실에 문제가있을 수 있습니다. 경로 및 제한된 권한이 있어야합니다.

문제 : 창 때문입니다.