【问题标题】:Spawn nodes at random times combing waitForDuration:withRange and runBlock: in an SKAction sequence在随机时间结合 waitForDuration:withRange 和 runBlock: 在 SKAction 序列中生成节点
【发布时间】:2015-06-15 17:43:54
【问题描述】:

我正在使用 SpriteKit 制作游戏,其中节点在屏幕顶部生成并下降。但是,我希望这些节点以 0.1 到 3 秒之间的随机时间间隔生成。例如,第一个节点在 1.3 秒内生成,下一个节点在 1.8 秒内生成,然后是 2.5 秒,然后是 0.8 秒,以此类推。我不确定如何利用 waitForDuration 函数来做到这一点。我目前拥有的代码是:

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

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

当我尝试运行此代码时,它会冻结我的游戏。我把 addTears() 去掉了,放了一个日志,日志上出现了一个无限循环。我需要知道如何摆脱它。

我的 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 skspritenode skaction


    【解决方案1】:

    如果我没记错的话,waitForDuration:withRange: 方法是这样工作的: 如果您将持续时间设为 3(秒)范围设为 1 秒,那么您获得的随机值将在 2 到 4 秒之间 .也就是说,您应该将这些值用于您所描述的内容:let wait = SKAction.waitForDuration(1.55, withRange: 1.45)

    对于冻结问题,如果您在此处正确粘贴代码,则问题出现在 self.runAction(SKAction.repeatActionForever(spawn)) 这一行,您应该像这样调用 sequenceself.runAction(SKAction.repeatActionForever(sequence))

    PS:在某些时候,您可能仍想同时控制屏幕上的眼泪量。

    如果有帮助,请告诉我。

    【讨论】:

    • 这非常有效,谢谢。如果我也想随机化这些眼泪落下的速度,有没有一种方法可以用来做这件事?他们目前正在使用以下方法以恒定速度下降:physicsWorld.gravity = CGVectorMake(0, -7)
    • 你可能会改变你眼泪的physicsBody(质量,...)的一些设置。但是,如果你正在寻找的是,例如,让一些眼泪不断掉下来,我认为你应该看看 SKEmitterNode / Particle Emitter 在 .sks 文件中的位置,或者以编程方式,你将能够设置几个变量与范围。尝试玩它:)
    • 感谢您的回复。我会投票,但我需要更多的声誉。
    • 没问题,很高兴我能帮上忙 :)
    • 这是有史以来最好的解释,你是对的 :) 所以基本上它所做的计算是持续时间 -+ 范围。因此,如果持续时间为 10 且范围为 5,则随机数将从 5 变为 15。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-14
    • 2013-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多