2017-07-24 53 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