【问题标题】:Spawning a Spritekit node at a random time随机生成一个 Spritekit 节点
【发布时间】:2018-11-19 01:32:20
【问题描述】:

我正在制作一个游戏,其中有一个节点正在生成并从屏幕顶部掉落。但是,我想让节点以 3 秒的随机时间间隔生成。所以一个在 1 秒内产生,下一个在 2.4 秒内产生,下一个在 1.7 秒内产生,以此类推。我正在为这个代码应该是什么而苦苦挣扎。

我目前用于生成节点的代码:

    let wait = SKAction.waitForDuration(3, withRange: 2)
    let spawn = SKAction.runBlock { addTears()
    }

    let sequence = SKAction.sequence([wait, spawn])
    self.runAction(SKAction.repeatActionForever(spawn))

我的 addTears() 函数的代码是:

func addTears() {
        let Tears = SKSpriteNode (imageNamed: "Tear")
        Tears.position = CGPointMake(Drake1.position.x, Drake1.position.y - 2)
        Tears.zPosition = 3
        addChild(Tears)

    //gravity
    Tears.physicsBody = SKPhysicsBody (circleOfRadius: 150)
    Tears.physicsBody?.affectedByGravity = true

    //contact
    Tears.physicsBody = SKPhysicsBody (circleOfRadius: Tears.size.width/150)
    Tears.physicsBody!.categoryBitMask = contactType.Tear.rawValue
    Tears.physicsBody!.contactTestBitMask = contactType.Bucket.rawValue
    }

【问题讨论】:

标签: swift sprite-kit nstimer skspritenode


【解决方案1】:

不建议您将 NSTimer 与 SpriteKit 一起使用(请参阅 SpriteKit - Creating a timer)。相反,要生成随机时间,您可以使用 SKAction.waitForDuration:withRange:

创建一个空闲一段时间的操作。

当动作执行时,动作会等待指定数量的 时间,然后结束……

每次执行动作时,动作都会计算一个新的随机数 持续时间的值。 持续时间可能会在任一方向上变化 最多为 durationRange 参数值的一半...

要随机生成节点,您可以将waitForDuration:withRangerunBlock: 组合成SKAction 序列。例如:

// I'll let you adjust the numbers correctly...
let wait = SKAction.wait(forDuration: 3, withRange: 2)
let spawn = SKAction.run {
    // Create a new node and it add to the scene...
}

let sequence = SKAction.sequence([wait, spawn])
self.run(SKAction.repeatForever(sequence))
// self in this case would probably be your SKScene subclass.

【讨论】:

  • 我用这段代码替换了我的代码,但由于某种原因我的游戏无法启动。我的节点已经创建,所以我将它添加到显示 // 创建新节点并将其添加到场景中的区域...。无法弄清楚我做错了什么。
  • 当你说“不会开始”?你有任何错误吗?
  • 运行此代码的场景是我的第二个场景,第一个是“点击启动”。当我运行游戏并尝试点击开始时,它不会加载我的第二个场景。
  • 结冰了吗?他的第二个场景有什么东西跑了吗?您将我在答案中提供的代码放在哪里?
  • 我把代码放在我的 didMoveToView 中。我认为它只是冻结,因为第二个场景没有运行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-03
  • 2023-03-29
  • 2014-05-21
相关资源
最近更新 更多