Scenekit 计时器相互干扰

问题描述

我目前正在创建一个游戏,该游戏使用多个不同的计时器来增加多个数字,同时在屏幕上显示为 3D 文本。当屏幕上只有一个数字时,它可以完美运行,并且数字计数非常无缝。然而,当存在多个数字并因此运行多个计时器时,这些数字确实会出现故障,并且它们都计数显示相同的数字,即使它们具有不同的值。

我使用这个启动计时器:

p1Price = Timer.scheduledTimer(timeInterval: 0.2,target: self,selector: #selector(p1PriceCalculator),userInfo: nil,repeats: true)

并使用它来更改文本:

    @objc func p1PriceCalculator() {
        var smallHouse1Incremental: Int = Int(arc4random_uniform(UInt32(100)))
        
        smallHousePrice1 = smallHousePrice1 + smallHouse1Incremental
  
        smallHouse1Incremental += Int(arc4random_uniform(UInt32(100)))

        if let smallHouse1TextGeometry = smallHouseText1.geometry as? SCNText {
            smallHouse1TextGeometry.string = String(smallHousePrice1)
        }
    }

在整个代码中有几个相同的设置,唯一的变化是节点的名称

有没有人知道为什么会这样?

谢谢!

解决方法

这在 0.2 时经常发生,但它是可行的 - 我有 10-12 个同时运行,循环中有一些不错的东西。我没有看到容差集可以赋予它任何灵活性 - Docs(为计时器设置容差允许它在预定的触发日期之后触发。在定时器触发时允许系统灵活性增加了系统优化的能力以提高省电和响应能力。)-还要确保您的时间在主线程中运行-我不记得它们是否不起作用,或者它们是否偶尔工作-但是如果您不这样做,DEF会出现问题。

在此之后,您可能需要查看您的来电,看看您是否在其他地方做得太多。当它起雾时,您是否运行仪器来查看是否正在丢失内存或 CPU?