swift - Spritekit SKShapeNode 随机缩放,Swift

标签 swift sprite-kit scale skshapenode

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

相关文章:

r - ggplot 的 scale_y_log10 行为

c# - OpenGL - 性能差且标度值高

r - 如何在 R 中添加比例尺?

ios - 调用 Selector 到 DismissViewController

ios - 如何在 ios/swift 中将 url 转换为字符串?

ios - SpriteKit : Why does playing sound return error?

ios - 在重新加载 SKScene 之前尝试使用 removeAllChildren() 和 removeAllActions() 时创建的 fatal error

ios - 简单的 Swift 3 日志记录解决方案

ios - 如何多次使用 UIPickerView 和 TextField ?

ios - Sprite Kit SKActions 未触发