【问题标题】:Spritekit SKShapeNode Randomize Scale, SwiftSpritekit SKShapeNode 随机缩放,Swift
【发布时间】:2018-10-15 06:15:09
【问题描述】:

如何在不超过最大集合大小且不小于最小集合大小的情况下以随机大小永久缩放 SKShapeNode?​​p>

【问题讨论】:

  • 您好,欢迎来到 SO。您需要向我们提供更多详细信息 - 您希望其比例因子多久更改一次,您希望它立即更改大小还是在一段时间内过渡到新大小?您在 SK、Swift、游戏编程或一般编程方面有多少经验?
  • 嗨,我刚刚开始使用 SK 和 Swift。我喜欢。我正在制作一个简单的游戏,这是我需要解决的主要功能。我知道如何随着时间的推移缩放形状,但不知道如何在不超过最大和最小尺寸设置的情况下每 0.5 秒将形状缩放到不同的尺寸。所以这将是随机大小,永远不会相同,不是一个序列。感谢您的帮助,如果您需要更多详细信息,请告诉我!
  • 克里斯 - 我已经发布了一个可能有帮助的答案。看看你的想法。我不得不猜测您的一些要求
  • 啊,聪明!我认为这正是我所追求的。我仍然无法让它工作。我会坚持下去并报告。感谢您的帮助!
  • 我几乎是凭记忆写的,蚕食了我的其他答案并在 iPad Playgrounds 应用程序中测试了随机化代码,因此很可能有一两个错误。如有任何问题,请随时发布,我会看看。

标签: swift sprite-kit scale skshapenode


【解决方案1】:

执行此操作的一种方法(如果我正确理解您的问题),将具有 3 个 TimeInterval 类型的属性,用于跟踪自上次缩放精灵以来已经过了多长时间,应该多久缩放一次精灵(其中将初始化为 0.5s)以及缩放动作需要多长时间(默认与缩放之间的时间相同):

  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% 之间缩放)

update: 中调用一个函数来检查缩放时间间隔是否已经过去。如果有,则创建并运行新的 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
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多