gpt4 book ai didi

swift - 具有/多个间隔的更新功能(SWIFT)

转载 作者:行者123 更新时间:2023-11-28 13:12:16 25 4
gpt4 key购买 nike

我是编程新手,所以请帮忙。我正在尝试设置间隔以在整个游戏中创建各种 Sprite 节点(使用更新功能)。但是,每个 Sprite 节点需要以不同的间隔生成。我有一堆“if”语句,它似乎导致我的帧速率下降并导致应用程序滞后。有人可以告诉我如何解决这个问题吗?如果可能,还请向我解释为什么这样做,以便我更好地理解编码过程。谢谢!

var timeBetweenBirds: Int!
var timeBetweenBadBirds: Int!
var timeBetweenSubtractTimeBirds: Int!
var timeBetweenAddTimeBirds: Int!
var timeBetweenBonusBirds: Int!

var now : NSDate?
var nextTime : NSDate?
var badBirdNextTime: NSDate?
var subtractTimeBirdNextTime: NSDate?
var addTimeBirdNextTime: NSDate?
var bonusBirdNextTime: NSDate?

override func update(currentTime: CFTimeInterval) {

timeBetweenBirds = Int(arc4random_uniform(3))
timeBetweenBadBirds = Int(arc4random_uniform(3) + 2)
timeBetweenSubtractTimeBirds = Int(arc4random_uniform(3) + 2)
timeBetweenAddTimeBirds = Int(arc4random_uniform(1) + 5)
timeBetweenBonusBirds = Int(arc4random_uniform(20) + 20)


now = NSDate()

if now?.timeIntervalSince1970 > nextTime?.timeIntervalSince1970 {

nextTime = now?.dateByAddingTimeInterval(NSTimeInterval(timeBetweenBirds))

createBird()
}

if now?.timeIntervalSince1970 > badBirdNextTime?.timeIntervalSince1970 {

badBirdNextTime = now?.dateByAddingTimeInterval(NSTimeInterval(timeBetweenBadBirds))

createBadBird()

}

if now?.timeIntervalSince1970 > subtractTimeBirdNextTime?.timeIntervalSince1970 {

subtractTimeBirdNextTime = now?.dateByAddingTimeInterval(NSTimeInterval(timeBetweenSubtractTimeBirds))

createSubtractTimeBird()

}

if now?.timeIntervalSince1970 > addTimeBirdNextTime?.timeIntervalSince1970 {

addTimeBirdNextTime = now?.dateByAddingTimeInterval(NSTimeInterval(timeBetweenAddTimeBirds))

createAddTimeBird()

}

if now?.timeIntervalSince1970 > bonusBirdNextTime?.timeIntervalSince1970 {

bonusBirdNextTime = now?.dateByAddingTimeInterval(NSTimeInterval(timeBetweenBonusBirds))

createBonusBird()

}

最佳答案

也许这不是正确的解决方案,但它至少会简化事情。

有几件事需要考虑。

  • 现在,您正在每个 update 循环中生成一个新的 timeBetweenBirds 值,但只有在 结束时才使用它如果语句

    override func update(currentTime: CFTimeInterval) {

    timeBetweenBirds = Int(arc4random_uniform(3)) //Created on each update loop
    ...
    now = NSDate()

    if now?.timeIntervalSince1970 > nextTime?.timeIntervalSince1970 {
    //Only used here
    nextTime = now?.dateByAddingTimeInterval(NSTimeInterval(timeBetweenBirds))
    createBird()
    }

    因此,可以从仅在需要时更新 timeBetweenBirds 值开始。

  • 在我看来,您不需要创建所有这些日期并在它们之间进行比较。

    每次调用 update 时,您都会免费获得一个 currentTime 属性 :-) 此属性可用于检查 nextTime像这样的变量:

    var nextTime: CFTimeInterval = 0
    ...
    override func update(currentTime: CFTimeInterval) {
    if currentTime > nextTime {
    nextTime = currentTime + CFTimeInterval(arc4random_uniform(3))
    createBird()
    }
    //And so on with your other if statements
    }

正如我所说,我不知道这是否会加快速度,但它会简化您的代码,这总是好的 :-)

关于swift - 具有/多个间隔的更新功能(SWIFT),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30885189/

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