英雄翻倒但没有倒退

时间:2016-01-03 02:11:57

标签: swift sprite-kit swift2 runner

我有这个游戏我正在制作并且在游戏中玩家通过在这个类似梁的地面下移动来避开阻挡。到目前为止,除了英雄在翻倒时没有翻倒的事实,我已经把所有事情都搞定了。

这是我使用的代码:

func flipDown() { 
    isUpsideDown = !isUpsideDown

    var scale: CGFloat
    if isUpsideDown { 
    scale = -1.0
    } else { 
        scale = 1.0
    } 

    let translate = SKAction.moveByX(0, y: scale * (size.height + kMLGroundHeight), duration: 0.1)
    let flip = SKAction.scaleYTo(scale, duration: 0.1)
    runAction(translate)
    runAction(flip)
} 

1 个答案:

答案 0 :(得分:0)

我的建议(抱歉,我很乖,我真的不知道):

1)您必须添加isFlipping属性才能计入后续调用,并将isUpsideDown重命名为isAtBottom(品味问题,但更好地描述其目的):

... blah-blah-blah initialization

self.isFlipping = false
self.isAtBottom = true
self.flipDuration = 0.1

2)接下来,单独的翻转和动画逻辑

... blah-blah-blah implementations

let flipScale() -> {
    return self.isAtBottom ? 1.0 : -1
}

func makeFlip() {
    if self.isFlipping then
        return

    // first press, can actualy animate
    self.isFlipping = true

    self.runFlipAction(self.flipScale(), () -> Void = {
        // completion block, runs on flip finished
        self.isFlipping = false
        self.isAtBottom = !self.isAtBottom
    })
}

let runFlipAction(scale: CGFloat, after: () -> Void) {
        let translate = SKAction.moveByX(
            0, 
            y: scale * (size.height + kMLGroundHeight), 
            duration: self.flipDuration
        )
        let flip = SKAction.scaleYTo(scale, duration: self.flipDuration)

        runAction(
            // must run in a group, in order to properly handle completion anchor time
            SKAction.group([translate, flip]), 
            completion: after
        )   
}

现在你可以拨打hero.makeFlip(),如果英雄是半空中的话,它会被翻转或忽略