ios - 以不同的持续时间永远重复 Action

标签 ios objective-c swift sprite-kit

我对 Sprite Kit 还很陌生,我正在尝试开发一款游戏,其中一些怪物使用此代码永远移动。

    return SKAction.sequence([
        SKAction.runBlock({ self.moveMonster(monster) }),
        SKAction.waitForDuration(monster.movementSpeed())
    ])

问题是我希望等待时间根据怪物速度而变化,这是一个函数。

这段代码没有实现我想要做的事情,因为 movementSpeed 函数只被调用一次。

非常感谢您的帮助!

最佳答案

您可以使用 runAction 中的 completionHandler 每次添加不同的 SKAction 序列,以更改您的等待持续时间。例如。

func addSKAction(waitDuration : NSTimeInterval)
{
    let moveSprite = SKAction.runBlock({ () -> Void in
        self.moveMonster(monster)
    })

    let waitDuration = SKAction.waitForDuration(waitDuration)

    let sequence = SKAction.sequence([moveSprite,waitDuration])

    spriteNode.runAction(sequence, completion: { () -> Void in

        addSKAction(waitDuration) // Change wait duration each time.

    })
}

每次更改 waitDuration 变量的值。

如果你只是想随机改变waitDuration,可以使用SKAction.waitForDuration:withRange:

let moveSprite = SKAction.runBlock({ () -> Void in
    self.moveMonster(monster)
})

let waitDuration = SKAction.waitForDuration(5, withRange: 4)

let sequence = SKAction.repeatActionForever(SKAction.sequence([moveSprite,waitDuration]))        

这会将 waitDuration 从 (5 - range/2) = 3 随机更改为 (5 + range/2) = 7 .

关于ios - 以不同的持续时间永远重复 Action ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28563239/

相关文章:

ios - 电子邮件已发送完毕,但发送电子邮件窗口未关闭?

ios - 如何在文件swift中写入字节数据

ios - 在 iOS 的 Realm 中添加数据的问题

ios - 使用 TwitterKit/Fabric 身份验证失败获取单个推文

ios - 如何分发我的应用程序的多个版本?

iphone - 从 id 查找对象类型

ios - 您是否注意到 dispatch_after 在 iOS 设备上运行速度太慢了 ~10%?

ios - Swift 中的 NSSecureCoding(Facebook SDK)

ios - transitionfromview 和 addsubview 的区别

iphone - 有什么技巧可以绘制动画路径吗?