在较长的触摸时增加跳跃高度,直到最大高度
Posted
技术标签:
【中文标题】在较长的触摸时增加跳跃高度,直到最大高度【英文标题】:Increase jump height on longer touch until maximum height 【发布时间】:2015-05-13 19:51:05 【问题描述】:我正在使用以下方法让我的角色跳跃:
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)
这很好用,但我想让角色根据触摸的长度跳到某个高度,直到达到最大值。我尝试了一些具有帧持续时间的方法,但这没有用。
如何根据触摸长度让角色跳跃到最大高度?
【问题讨论】:
【参考方案1】:您可以在抬起手指时禁用身体在 y 轴上的速度,如果您想限制最大跳跃高度,请使用可选变量存储跳跃前的初始 y 位置并检查当前 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?
【讨论】:
我在哪里(以及如何)声明 initialJumpY 值? 删除 ;在 之后并将velocity.y 更改为velocity.dx。 我的错误,请参阅我上次的编辑。仅当它为 nil 时才需要设置 initialJumpY。尝试并理解逻辑,您应该可以轻松克服出现的任何错误。 是的,您可以尝试使用初始 y 位置和当前 y 位置之间的增量来影响脉冲值。 尝试打开另一个问题,我或其他任何人都会很乐意为您提供帮助。但首先尝试自己做,并展示你尝试过的东西。首先尝试使用 self.character.position.y - self.initialJumpY 值作为脉冲值【参考方案2】:在触摸开始时启动计时器动作,在触摸结束时结束。包含在里面会像下面这样,
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))
【讨论】:
以上是关于在较长的触摸时增加跳跃高度,直到最大高度的主要内容,如果未能解决你的问题,请参考以下文章