我有这个游戏我正在制作并且在游戏中玩家通过在这个类似梁的地面下移动来避开阻挡。到目前为止,除了英雄在翻倒时没有翻倒的事实,我已经把所有事情都搞定了。
这是我使用的代码:
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)
}
答案 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()
,如果英雄是半空中的话,它会被翻转或忽略