2010-12-18 65 views
1

看看這段代碼在這裏:SDL:兩個事件循環?

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

**從不**等待事件。讓事件來找你。 – 2010-12-18 23:09:20

回答

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 2010-12-19 21:46:24

+0

@Lemmons:不知道在Windows中有什麼特別的事要做,但我會感到驚訝。在X11中適合我。 – ephemient 2010-12-20 02:00:15

1

最小的變化:

你可以內部while循環集後退出添加if (QUIT) break;

或者,您可以將外部while循環移動到單獨的函數,並在QUIT = true;之後添加return;

好的方面轉變:

重構類似的例子很多你的代碼在網站上提供(在SourceForge,或莫利火箭,或者它只是谷歌)。