斯威夫特:如何使我的angular色在我的游戏中只能在他击中地面时跳跃?

我正在开发一个游戏,angular色从陆地跳到陆地。 我把所有的东西都做下来,除了我剩下的问题,就是如果你继续敲击屏幕,他可以永远跳跃。 我想要它,所以他必须在他能再次跳跃之前打倒地面。

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,如果着陆,骑士只会跳跃。 这真的取决于你正在寻找的跳跃types。

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

只需将一个BOOL属性添加到您的场景中,就像isJumping被初始化为false

然后,在touchesBegan检查isJumping是否为true。 如果不是,执行跳转并将isJumping设置为true

当跳跃结束(骑士已经接触地面),设置是isJumping回到false