2017-07-24 52 views
4

我正在開發一個遊戲,我的角色從陸地跳到陸地。除了剩餘的問題,我已經把所有的東西都做下來並完成了,如果你繼續點擊屏幕,他可以繼續跳躍。我想要它,所以他必須在他再次跳躍之前將其擊倒。斯威夫特:如何讓我的角色在我的遊戲中只能在他擊中地面時跳躍?

import SpriteKit 
import GameplayKit 

class GameScene: SKScene, SKPhysicsContactDelegate { 
    struct PhysicsCatagory { 
     static let Knight : UInt32 = 0x1 << 1 
     static let land : UInt32 = 0x1 << 2 
    } 

    var Knight = SKSpriteNode() 
    var land = SKSpriteNode(imageNamed: "CJLand4") 

這是我當前的代碼,讓他跳:

Knight.physicsBody?.velocity = CGVector(dx: 0, dy: 0) 
Knight.physicsBody?.applyImpulse(CGVector(dx: 0, dy: 325)) 

我有這個touchesBegan下,並將其添加重力和衝動也讓他跳。但是我只希望他每次擊中土地都能跳一次。如果可以的話請幫忙。

+0

您可以用布爾值跟蹤與陸地的碰撞,並在跳躍發生後將其設置爲假。 – the4kman

+0

@ the4kman所以東西沿着touchLand = false?你能給我一個例子代碼 – Luyer

回答

0

只需在您的場景中添加一個名爲isJumping的BOOL屬性,該屬性初始化爲false

然後,在touchesBegan檢查isJumping是否爲真。如果不是,執行跳轉並將isJumping設置爲true

當跳躍結束(騎士已接觸地面)時,將isJumping設置回false

+0

我建議與其他方法結合使用這種方法,如果你的騎士有雙跳功能,單跳的問題是如果isJumping = false,並且騎士跌倒,他仍然可以跳躍在空中 – Knight0fDragon

1

你可以檢查垂直速度是否爲0,騎士只有在着陸時才跳躍。這真的取決於你正在尋找的跳躍類型。

if Knight.physicsBody?.velocity.y == 0 { Jump() } 
+0

這是我最喜歡的解決方案,我推薦這樣做,只要騎士不跳雙跳 – Knight0fDragon

+0

非常感謝,這個作品完美無缺。我非常感謝幫助! – Luyer