加长跳跃时的跳跃高度,直到最大高度

我正在使用以下方法来使我的angular色跳转:

override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) { if onGround && !gameOver { self.character.physicsBody?.applyImpulse(CGVectorMake(0, 75)) self.onGround = false } } override func touchesEnded(touches: Set<NSObject>, withEvent event: UIEvent) { } 

这个工作正常,但是我想让angular色根据触摸的长度跳到一定的高度,直到最大。 我已经尝试了一些帧持续时间,但没有奏效。

我怎样才能让angular色跳跃基于触摸长度,直到最大高度?

当您抬起手指时,您可以在y轴上禁用身体的速度,并且如果要限制最大跳跃高度,请使用可选variables来存储跳转前的初始y位置,并检查当前y位置与最初的位置:

 override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) { if onGround && !gameOver { if self.initialJumpY == nil { self.initialJumpY = self.character.position.y } if self.character.position.y - self.initialJumpY < <Your cap value> { self.character.physicsBody?.applyImpulse(CGVectorMake(0, 75)) } else { self.character.physicsBody?.velocity.dy = 0.0 } self.onGround = false } 

并在完成时重置:

  override func touchesEnded(touches: Set<NSObject>, withEvent event: UIEvent) { self.character.physicsBody?.velocity.dy = 0.0 self.initialJumpY = nil } 

在触摸方法定义的节点类中声明initialJumpY

 class MyNode: SKNode { var initialJumpY: Float? } 

触摸开始时开始定时器动作,触摸结束时结束。 包含在里面会像下面这样,

 var force = 0.0 let timerAction = SKAction.waitForDuration(1.0) let update = SKAction.runBlock({ if(force < 100.0){ force += 1.0 } }) let sequence = SKAction.sequence([timerAction, update]) let repeat = SKAction.repeatActionForever(sequence) self.runAction(repeat, withKey:"repeatAction") 

然后在你的touchesEnded中,移除这个动作并使用force的值来执行你的跳跃。

 self.removeActionForKey("repeatAction") self.character.physicsBody?.applyImpulse(CGVectorMake(0, force))