代码:
func jumpAction(_ JumpPos: CGPoint, _ clickPos: CGPoint) {
if jumpCount < 2 {
var disty = (clickPos.y - JumpPos.y)
var distx = clickPos.x
self.physicsBody?.velocity = CGVector(dx: 0, dy: 0)
self.physicsBody?.applyImpulse(CGVector(dx: distx, dy: disty))
if onGround == false {
jumpCount += 1
}
}
}//
func didBegin(_ other: SKSpriteNode, _ contact: SKPhysicsContact) {
if contact.contactPoint.y < self.frame.minY + 10 {
jumpCount = 1
onGround = true
}
if other.physicsBody?.categoryBitMask == Mask.SpinPlat {
jumpCount = 0
}
}
func didEnd(_ contact: SKPhysicsContact) {
onGround = false
}
我上面有3个功能。当我按下屏幕上的跳转按钮时,会调用JumpAction。当与播放器发生与平台顶部的接触时,会调用didBegin和didEnd函数。
我的问题:
因此,如果玩家在平台上并跳转,则在didEnd函数之前调用跳转动作。这就是当玩家联系平台时我将jumpCount设置为1的原因。这很好用......
真正的问题是当我的球员落在平台上时,他稍微反弹(由于恢复原状)然后按下跳跃按钮。
发生这种情况时,onGround标志会在调用跳转动作之前翻转为false,而我的播放器只能单跳。
我试图找到一种简单的方法来解决这个问题,而不必实现一堆代码,但尚未找到方法。
所以这就是我在这里的原因。我希望能够双跳,即使我之前解释的那个轻微的反弹。
提前谢谢!!!
其他信息: 我使用onGround标志,这样如果玩家在地上,如果他们按下正确位置的跳跃按钮,他可以沿地面滑动......
答案 0 :(得分:1)
您是否尝试过简单地延迟在地面上设置&#34;&#34;标志只有几分之一秒?
let waitAction = SKAction.wait(forDuration: 0.5)
scene.runAction(waitAction, completion: {
self.onGround = false
})
显然,您可以尝试确切的持续时间,以确保它能够提供&#34;反弹&#34;足够的时间结束。