2012-11-06 93 views
1

我創建了這個2D遊戲,並且遇到了跳轉功能問題。它的工作原理是,角色上下跳動,但是我希望能夠跳躍,然後在角色在空中時移動角色,例如。所以它可以跳到一個平臺上。我正在使用SDLK ...字符跳轉功能

case SDL_KEYDOWN: 
     switch (event.key.keysym.sym){ 
      RArrow = (event.button.button = SDLK_RIGHT); 
      Jump = (event.button.button = SDLK_SPACE); 

      if((RArrow) && (Jump)) 
      { 
      if(g->getPlayer()->worldY = GROUND_LEVEL) 
       { 
        g->getPlayer()->jump(); 
        g->getPlayer()->move(10); 
       } 
      } 
      break; 

這是我試過的方法之一。我也嘗試在跳轉案例中做一個切換功能來左右導航,但是我沒有對它進行編碼或者沒有工作。

回答

0

我對SDLK並不熟悉,以及它是如何在真實遊戲開發中完成的。 但是我實現這個的一種方法是查看兩個鍵是否在每個遊戲節拍上被按下。所以如果w + d被按下,角色會同時向上並且正確。但在我看來,這是一個駭人聽聞的解決方案。

0

隨着列出的實施,看起來像角色只會在地面上移動。您需要更改代碼,以便每次打勾時,遊戲都會檢查角色是否正在跳躍,如果是,則會將角色朝向正在跳躍的方向移動。此代碼可能需要活在您的事件處理程序之外。

理想情況下,您的鍵盤事件處理程序只會在字符上設置一個標誌,指示它們正在跳躍並指向哪個方向,然後在您的遊戲循環中調用實際處理跳躍的update()方法(並在角色與世界幾何相碰撞,就像地板或牆壁)。

希望這會有所幫助!

編輯:

沒有看到你的代碼的其餘部分,我不能多說。我對C++也不是很瞭解,我假設它使用了C++。一種可以實現的方法是:

  • 用「g-> getPlayer() - > setJumping()」替換「g-> getPlayer() - > jump()」。
  • 在Character上實現「setJumping()」來設置跳轉標誌。
  • 在遊戲循環中,調用「g-> getPlayer() - > updatePos()」
  • 在角色上實現「updatePos()」來更新角色的位置。在這裏,檢查跳躍標誌,如果它是真的,則根據跳躍算法更新位置。
+0

我仍然無法編寫您要求我實現的代碼。你能再詳細一點嗎? –

+0

在上面的修改中查看我的回覆。 –