2014-04-07 16 views
0

我腳本里面的應用程序的一些基本的導航,但隨後沒有工作,所以我減少 他們這個我的應用程序無法理解SDL_KEYDOWN

void CSystem::controls() 
{ 
switch (mainEvent->type) 
{ 
case SDL_KEYDOWN: 
    switch (mainEvent->key.keysym.sym) 
    { 
    case SDLK_a: 
     cout << "JKANAJIDJAIJIHVUIRBYVHRU" << endl; 
     break; 
    } 
    break; 

case SDL_KEYUP: 
    switch (mainEvent->key.keysym.sym) 
    { 
    case SDLK_a: 
     cout << "removed A" << endl; 
     break; 
    } 
    break; 
} 
} 

我看到了這個問題,但我想不出任何其他方式來解決這個問題,它讀取我的KeyUp事件,但它不會讀取我的KeyDown事件,我試圖複製此代碼並將其粘貼到我的遊戲中,並且它工作。

我的大腦失控會以什麼問題,我查了mainEvent,它只是一般的

SDL_Event* mainEvent = new SDL_CreateEvent(); 

我不能感覺到什麼錯這個......這是一個錯誤或東西?只是因爲這個小小的挫折,我一直在考慮抓撓整個應用程序。

+1

是否有某種錯誤?我不確定你在問什麼。 – Aesthete

+1

爲交換機語句添加一個默認值:查看事件帶來了什麼,以及您爲sym獲取的其他可能值。 – cup

+0

我已經檢查過這個之前的所有函數,一切正常,@Aesthete它不會讀取我的KEYDOWN事件,換句話說,它不能感知我是否按下了一個按鈕,但它可以感覺如果我擡起我的手指從一個按鈕。當我將它粘貼到我的其他應用程序時,代碼正在運行...... – kdyz

回答

3

您需要使用SDL_PollEvent(mainEvent)。告訴我它是否工作:)

void CSystem::controls() 
{ 
    while (SDL_PollEvent(mainEvent)) 
    { 
    switch (mainEvent->type) 
    { 
    case SDL_KEYDOWN: 
     switch (mainEvent->key.keysym.sym) 
     { 
     case SDLK_a: 
      cout << "JKANAJIDJAIJIHVUIRBYVHRU" << endl; 
      break; 
     } 
     break; 

    case SDL_KEYUP: 
     switch (mainEvent->key.keysym.sym) 
     { 
     case SDLK_a: 
      cout << "removed A" << endl; 
      break; 
     } 
     break; 
    } 
    } 
} 
+0

即使在我發佈此問題之前,我已經在我的遊戲循環中執行了該操作,並且它不應該是輪詢事件問題,因爲它理解我的註冊事件 – kdyz

+0

你發佈的代碼是正確的(我沒有看到任何錯誤,至少),如果你先說你pollEvent。也許問題是在代碼的其他部分...如果你發佈我可以看看,因爲我沒有看到任何問題在這裏。 – jofra

+0

我知道,我已經檢查了整個代碼,我真的很想給你整個代碼,但是我把它們分成了幾個類,所以遊戲循環看起來像一團亂七八糟的類,有沒有辦法把.sln文件放在這裏? aahahhaah認真-_- ahhhhhh沒關係,我只是把這個項目放入回收站..... – kdyz