如何使 SKShapeNode 永远以随机大小缩放,同时不超过最大设置大小且不小于最小设置大小?
最佳答案
做到这一点的一种方法(如果我正确理解你的问题),将有 3 个 TimeInterval
类型的属性,用于跟踪自上次缩放 Sprite 以来已经过了多长时间, Sprite 的频率应缩放(初始化为 0.5 秒)以及缩放操作需要多长时间(默认与缩放之间的时间相同):
var timeOfLastScale: CFTimeInterval = 0.0
var timePerScale: CFTimeInterval = 0.5
var scaleTime = timePerScale
我们将自上次缩放以来的时间初始化为 0,因为它尚未发生。我还使用 timePerScale 作为缩放效果的持续时间,因此一旦停止缩放,就会开始新的缩放操作,即节点不断缩放。这些可以在代码中修改以获得不同的效果。
我们还需要 2 个属性来定义最大和最小缩放尺寸(从 0-100%)以及整个缩放范围的计算属性(我们将其设为计算属性,以便如果您更改最大或最小缩放因子在您的代码中,您不必重新计算scaleRange):
var maxScale; UInt32 = 100
var minScale:UInt32 = 25
var scaleRange: Uint32 {
get {return maxScale - minScale}
}
(我假设节点可以在正常大小的 25% 到 100% 之间缩放)
在更新:
中调用一个函数来检查缩放时间间隔是否已过。如果有,则创建并运行一个新的 SKAction 来缩放节点并重置为自上次缩放以来的时间。
如果缩放时间尚未过去,则不执行任何操作:
override func update(_ currentTime: TimeInterval) {
scaleNode(currentTime)
// Rest of update code
}
func scaleNode(_ currentTime: CFTimeInterval) {
timeSinceLastScale = currentTime - timeOfLastScale
if timeSinceLastScale < timePerScale {return}
// Time per scale has passed, so calculate a new scale actiona and re-scale the node...
let scaleFactor = Float(arc4random_uniform(scaleRange)+minScale)/100
let scaleAction = SKAction.scale(to: scaleFactor,duration: scaleTime)
nodeToBeScaled.run(scaleAction)
timeOfLastScoreDecrement = currentTime
}
关于swift - Spritekit SKShapeNode 随机缩放,Swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52810690/