0

こんにちは、私はこの問題に数日間取り組んできましたが、答えが見つかりません。SDL2 のビルドが成功した後、プロジェクトがハングして応答しません。コマンドプロンプトウィンドウを使用して閉じない限り、入力を受け付けず、無期限にハングします。アプリケーション ウィンドウの「X」でさえ応答しません。プログラムがレンダラーに描画できるため、この問題はウィンドウ自体に関連しているようです。助けてください。

Windows 7、MinGW32、Eclipse Europa、および SDL2 を使用しています。

問題の例については、以下を参照してください....

内部ビルダーはビルドに使用されます

gcc -O0 -g3 -Wall -c -fmessage-length=0 -osrc\CTestProject.o ..\src\CTestProject.c

gcc -oCTestProject.exe src\CTestProject.o -lmingw32 -lSDL2main -lSDL2

プロジェクト CTestProject のビルド完了

消費時間: 562 ミリ秒。

SDL2 が応答しない

サンプルプログラムはこちら

#include <stdio.h>
#include <stdlib.h>
#include <SDL2/SDL.h>

int main(int argc, char* args[]) {
    
    SDL_Init(SDL_INIT_EVERYTHING);
    SDL_Event event;
    SDL_Window* sdlWindow = SDL_CreateWindow("test",SDL_WINDOWPOS_CENTERED,SDL_WINDOWPOS_CENTERED,300,300,SDL_WINDOW_OPENGL);
    SDL_Renderer* sdlRenderer = SDL_CreateRenderer(sdlWindow, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
    
    while(event.type != SDL_QUIT){
        SDL_RenderClear(sdlRenderer);
        SDL_SetRenderDrawColor(sdlRenderer, 150, 0, 0, 255);
        SDL_RenderPresent(sdlRenderer);         
    }
    
    SDL_DestroyRenderer(sdlRenderer);
    SDL_DestroyWindow(sdlWindow);
    SDL_Quit(); 
    
    return EXIT_SUCCESS;
}
4

1 に答える 1

2
   while(event.type != SDL_QUIT)
   {
        SDL_RenderClear(sdlRenderer);
        SDL_SetRenderDrawColor(sdlRenderer, 150, 0, 0, 255);
        SDL_RenderPresent(sdlRenderer);         
    }

whileループ内で変化しない変数を比較しています。SDL_PollEvent(&event)次のようなものを使用して、ループの繰り返しごとに更新する必要があります。

bool quit = false;
SDL_Event event;

// Loop while user hasn't quit
while ( !quit )
{
    //  Check all new event to see if a SDL_QUIT event has come in...
    while (SDL_PollEvent(&event) )
    {
        // SDL_QUIT event has come in, quit. 
        if ( event.type == SDL_QUIT )
        {
            quit = true;
        }
    }

    SDL_RenderClear(sdlRenderer);
    SDL_SetRenderDrawColor(sdlRenderer, 150, 0, 0, 255);
    SDL_RenderPresent(sdlRenderer);     
}

また、SDL2_main はもう必要ないと思います。少なくとも、私のコードでは使用しません。また、特定の例では必要ありません#include <stdio.h>#include <stdlib.h>


チュートリアル

SDL2 はかなり新しいので、チュートリアルはそれほど多くありません。私が知っているのはTwinklebearDevだけです。しかし、ほとんどの場合、SDL1.3 と SDL2 は非常に似ています。したがって、ほとんどの場合、SDL1.3 コードを で使用できます。1.3からSDL_Texture2.0への移植の詳細については、こちらを参照してください。SDL1.3 については、LazyFoo のチュートリアルを使用しました。SDL_RendererSDL_Window.

于 2013-09-22T18:36:57.713 に答える