在较长的触摸时增加跳跃高度,直到最大高度

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))

【讨论】:

以上是关于在较长的触摸时增加跳跃高度,直到最大高度的主要内容,如果未能解决你的问题,请参考以下文章

ImageView

控件ImageView

[SCOI2007] 蜥蜴 (最大流)

动画约束,如何在所需方向增加高度

玩家跳跃高度不一致 - Unity

自定尺寸单元格高度变化导致跳跃动画