gpt4 book ai didi

swift - Spritekit SKShapeNode 随机缩放,Swift

转载 作者:行者123 更新时间:2023-11-30 11:05:08 26 4
gpt4 key购买 nike

如何使 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com