2014-05-20 72 views
0

我正在開發一個遊戲,角色反彈很像「Flappy Bird」角色。Corona SDK,飛揚的鳥反彈效果

我把它運行良好,但我用touch event遞交彈跳效果,當用戶double touches真的很快它在播放器後面doubles the force

而且,舉個例子,如果玩家是從higher heightdropping那麼gravity似乎是太多了,我必須touch很多倍帶給玩家回來了,我似乎無法弄清楚如何使每個touch的字符數與bounces一致。

這裏是我的彈跳效果功能:

function flyUp(event) 
    if event.phase == "began" then 
     if gameStarted == false then 
      player.bodyType = "dynamic" 
      instructions.alpha = 0 
      tb.alpha = 1 
      addColumnTimer = timer.performWithDelay(1000, addColumns, -1) 
      moveColumnTimer = timer.performWithDelay(2, moveColumns, -1) 
      gameStarted = true 

      player:applyForce(0, -300, player.x, player.y) 
     else 
      player:applyForce(0, -460, player.x, player.y) 
     end 
    end 
end 

...這是我的球員被定義爲一個物理體:

physics.addBody(player, "static", 
    { density=.106, bounce=.1, friction=1, radius = 30 }) 

任何幫助將非常讚賞,我只是希望玩家總是能夠以同樣的數量上升,無論他點擊多少次以及投下多少錢。

由於

回答

0

你可能忘記了力量決定加速度,而不是速度。所以如果你有一個物體以速度V向下移動(V是正值,因爲在電暈中向下是正的),那麼applyForce()向物體施加瞬間向上的力(持續時間:一個時間幀),因此物體的向下速度將減小一點點(由於向上的力量減速),但是重力是恆定的,所以你必須多次按下以獲得足夠的減速度。

您可能想要的是直接將setLinearVelocity()設置爲負值,從而使其看起來好像對象在觸摸時「向上彈起」一樣;重力會給它一個拋物線的軌跡。另外,如果物體始終具有相同的線速度,那麼發生多少次輕敲並不重要,儘管每次輕敲都會以相同的向上速度抵消重力的影響。

0

兩個想法:

  • 爲了避免雙觸摸/雙反彈,施加冷卻期。當用戶觸摸時,在給定的時間內忽略其他觸摸。
  • 嚴格來說,你的每次觸摸獲得相同的彈跳量(或向上的力量)。這聽起來像你想要一個變量反彈取決於當前的速度對地面。這不應該太難。根據y軸上的速度,嘗試在player:applyForce中應用更多的向上力。如果玩家不墜落,則需要較小的力量。如果它們以終端速度下降,則需要更大的力量。

這聽起來像你認識到「完美」的物理在你的遊戲中不那麼有趣。情況往往如此。您可能需要嘗試,直到某件事情感覺正確。

+0

感謝您的回答!我發現如果我簡單地將applyForce更改爲setLinearVelocity並將重力向下調整一點,那麼玩家在他的漂浮上就會一致。 – siegs