2010-12-18 10 views
1

は、ここでは、コードのこの部分を見てみましょう:SDL:2つのイベントループ?

void game::startLoop() 
{ 
while(QUIT == false) 
{ 
    getRoomUpdate(); 
    applySurface(-15, 280, zombie_lefthand, buffer); 
    applySurface(455, 280, zombie_righthand, buffer); 

    SDL_Flip(buffer); 

    while(SDL_PollEvent(&gameEvent)) 
    { 
    if(gameEvent.type == SDL_QUIT) 
    { 
    QUIT = true; 
    } 
    } 

    while(SDL_WaitEvent(&keyEvent)) 
    { 
    switch(keyEvent.type) 
    { 
    case SDL_KEYDOWN: 
    switch(keyEvent.key.keysym.sym) 
    { 
    //blahkeypress 
    } 
    } 
    } 
} 
} 

私たちはキー入力を待っている間SDL_QUITが機能するようにする方法を把握しようとしています。これを行う方法はありますか、皆さんは良いアイデアを持っていますか?

私は少し初心者ですので、具体的にしてください。 :D

+1

**決してイベントを待つことはありません。イベントがあなたに来るようにしてください。 –

答えて

3

名前keyEventは間違っています。 SDL_WaitEventは、QUITを含むあらゆる種類のイベントを待機します。

SDL_Event event; 
SDL_WaitEvent(&event); 
switch (event.type) { 
    case SDL_QUIT: 
     quit = true; 
     break; 
    /* cases for keyboard events, etc. */ 
} 
+0

はい、問題は私がSDL_QUITにアクセスできないということです。私はその愚かなXを打つだろうし、それは終了しません。私はVC++でそれをやめなければなりません。 – Lemmons

+0

@Lemmons:Windowsで特別なことがあるのか​​どうかわかりませんが、私は驚いています。 X11でうまく動作します。 – ephemient

1

最小限の変更:

あなたはセットが終了することをループしながら、内側の後if (QUIT) break;を追加することができます。

または、外側のwhileループを別の関数に移動し、QUIT = true;の後にreturn;を追加することができます。

より良い変化:

は、(sourceforgeの時、またはモリーロケットで、またはそれをグーグル)は、Web上で利用できる多くの例に似たコードをリファクタリング。

関連する問題