1

隨着Phaser(以及allong的教程)跳躍超級容易與提供的Arcade物理模塊。然而,由於使用了玩家正在觸摸的邏輯,玩家只能在他們「在地面上」時跳躍,這對我來說令人討厭。如何啓用跳躍「就在」玩家接觸Phaser的地面?

我使用的代碼是基於Game Mechanic Explorer, Platformer #4和以下;

var canJump = this.player.body.touching.down; 

if (canJump && this.upInputIsActive()) { 
    this.player.body.velocity.y = this.JUMP_SPEED; 
} 

我想使玩家能夠當他們非常接近到地面,但尚未觸及使再跳躍/跳的登陸更流暢跳。因此,觀察到極限是由玩家的touching.down引起的,我的問題是:

  1. 是否有可能確定玩家距離他們正下方的地面(可以是平臺)的距離(「有多高」)?然後canJump只是距離的函數,只有非常小的值才爲真。

  2. 是否可以在玩家周圍擴展一個虛擬機器人(可以與玩家一起旅行),以便可以使用它自己的touching.down來檢測這種情況?這種方法更好嗎?玩家精靈本身不應該懸浮在地面或以其他方式受到影響。

這裏的目標是明確允許玩家跳躍他們應該能夠爲之前 - 所以記住向上按鍵的時間很短的時間,這可能是可行的,是不是我在這個特殊情況下尋求的解決方案。

+0

您必須創建一個計時器wantsToJump,並將其設置爲特定時間或步數,當用戶試圖在空中跳躍時,然後在更新期間對其進行計數。只要wantsToJump大於0,當檢測到接觸地面時,玩家應該立即跳躍。 – LearnCocos2D 2014-09-03 08:17:04

+0

@ LearnCocos2D這是當前的行爲,如果保持向上按鈕被按下(並且這種方法確實會在一個小的誤差範圍內複製它),但我的目標是實際上允許玩家「作弊/遊戲」該系統由幾個像素。在我目前的遊戲中,玩家反彈一點點(並且下降得慢)比在鏈接的例子中。 – user2864740 2014-09-03 08:46:56

+0

我不會沿着這條路走下去,如果你這樣做,意味着經常跳躍可以達到100像素的高度,但如果你做連續跳躍,第二次跳躍可能達到105像素的高度,可能允許玩家去到她不應該去的地方。另外它可能不會看起來/感覺更好。玩家會期望玩家在接觸地面時再次跳躍,而不是在稍高於地面時跳躍。也許你在註冊地面觸摸和重新跳躍之間有一個1幀的延遲,在重新跳躍之前會造成一個小的延遲? – LearnCocos2D 2014-09-03 09:09:39

回答

3
  1. 不是「本地」。沒有CCD或前瞻,身體只關心它正在旅行的方向。你試圖達到的目標通常被稱爲使用傳感器。 P2支持傳感器,但是Arcade Physics沒有,所以你必須模擬它 - 要麼通過創建第二個物體(你已經在第2點中提到過)或者使用標記。這可能是一個簡單的Point對象,當它們跳起時它會「下降」,然後您可以使用內置的距離檢查點和主體之間的距離檢查來滿足您的「近距離跳躍」要求。

  2. 是的,但是你的雪碧會在空中浮動。因此,請參閱第1點:)

+0

我最終通過創建一個小體(通過主精靈手動移動,而不是通過物理)並使用重疊測試來「解決」此任務。 – user2864740 2014-09-03 21:32:17