我试图动画一些旋转/从左到右的动画,但每当我打电话时 spinLeft()或spinRight()然后动画总是从第0帧开始。
换句话说,我希望能够说10个帧中的4个旋转,然后停止 从相反方向旋转,从第4帧开始。现在,它重置为第0帧。
var textures = [SKTexture]() // Loaded with 10 images later on.
var sprite = SKSpriteNode()
func spinLeft() {
let action = SKAction.repeatForever(.animate(with: textures, timePerFrame: 0.1))
sprite.run(action)
}
func spinRight() {
let action = SKAction.repeatForever(.animate(with: textures, timePerFrame: 0.1)).reversed()
sprite.run(action)
}
答案 0 :(得分:0)
你可以这样做(语法可能有点偏,但你明白了):
这里的关键是.index(of:...),它将为你提供索引。
func spinUp() {
let index = textures.index(of: sprite.texture)
if index == textures.count - 1 {
sprite.texture = textures[0]
}
else {
sprite.texture = textures[index + 1]
}
}
func spinDown() {
let index = textures.index(of: sprite.texture)
if index == 0 {
sprite.texture = textures[textures.count - 1]
}
else {
sprite.texture = textures[index - 1]
}
}
func changeImage(_ isUp: Bool, _ amountOfTime: CGFloat) {
let wait = SKAction.wait(duration: amountOfTime)
if isUp {
run(wait) {
self.imageUp()
}
}
else {
run(wait) {
self.imageDown()
}
}
}
如果您使用滑动手势识别器之类的东西,您可以使用它的方向来设置isUp Bool值以及用于changeImage函数的amountOfTime的滑动速度。
changeImage只会更改一次图像,因此您需要在其他地方处理此图像,或者如果您希望它最终连续旋转或消失,则创建另一个函数。
希望这有帮助!