2014-07-26 117 views
1

由於某些原因,當我通過eventplayerObj_behavior時,我的功能中的switch不起作用,當我點擊SPACE時,main內的開關工作得很好。當我仍然將整個開關直接放在主體的內部時,所有人都在工作。發生什麼事 ?爲什麼我無法將事件傳遞給函數(SDL2)?

#include <SDL.h> 
#include <stdio.h> 

void playerObj_behavior(SDL_Renderer * pRenderer, SDL_Event event) 
{ 

    /*code*/ 
    if (event.type == SDL_KEYDOWN) 
    { 
     switch (event.key.keysym.sym) 
     { 
     case SDLK_SPACE: 
      pressTimer = SDL_GetTicks(); 
      moveRef = playerObj.pos.y; 
      break; 
     } 
    } 
    /*code*/ 
} 

int main(int argc, char** argv) 
{ 
    /*code*/ 
    SDL_PollEvent(&event); 
    switch (event.type) 
    { 
    case SDL_QUIT: 
     keepExe = 0; 
     break; 
    } 

    playerObj_behavior(pRenderer, event); 
    /*code*/ 
} 

編輯:傳遞SDL_Keycode *sym,而不是SDL_Event event讓精靈對我的反應緊迫的空間,但它是所有車和unconsistent與運動公式。

當我複製/粘貼我的代碼功能到主和熔斷器開關都工作得很好。到底他媽發生了什麼 ?

+1

沒有理由不應該工作。除非,您的SDL_PollEvent()調用處於while循環中,並且playerObj_behavior()處於循環之外。 – askmish

+0

我不明白,我在這麼浪費了很多時間:/,也許我應該把這個事件當作一個指針來傳遞?但是如果我這樣做,我應該使用'event-> type'和'event-> key.keysym.sym',我有點迷路了? – Wicelo

+0

在main()中使用'event.type'並且如果您將它作爲指針傳遞,那麼在playerObj_behavior() – askmish

回答

1

我終於找到了罪魁禍首,外化函數也使局部變量,所以他們在哪裏初始化主循環的每一個回合。我將這些函數外化爲我的對象結構,現在一切正常。我需要讓GDB在Windows上工作,以便更快地發現這些問題。

相關問題