【问题标题】:sceneDidLoad Running TwicesceneDidLoad 运行两次
【发布时间】:2023-03-23 22:06:01
【问题描述】:

当我运行我的程序时。我放入“override func sceneDidLoad()”的代码运行了两次。

例如

注意:我不知道为什么这张图片没有上传,但它显示“spawn”发生了两次。

此代码只应在调用“sceneDidLoad()”时运行一次。

这里是“sceneDidLoad”函数和“testSpawn()”函数的代码(这是给出重复打印输出的特定函数)。

class GameScene: SKScene {

    var mapTerrain: SKTileMapNode!


    override func sceneDidLoad() {
        cam = SKCameraNode()
        cam.xScale = 1
        cam.yScale = 1
        //do zoom by change in scale in pinch. (E.g. if they start out 5 units apart and end up 15 units apart, zoom by a factor of 3
        self.camera = cam
        self.addChild(cam)
        cam.position = CGPoint(x: 100, y: 100)
        setupLayers()
        loadSceneNodes()
        setUpUI()
        testSpawn()
        //print("\(self.frame.width), \(self.frame.height)")
    }
     func testSpawn(){
        let RedLegion = legion(texture: textureRedLegion, moveTo: nil, tag: 1, health: 2)
        RedLegion.position = mapTerrain.centerOfTile(atColumn: 0, row: 0)
        RedLegion.team = "Red"
        unitsLayer.addChild(RedLegion)
        legionList.append(RedLegion)
        print("spawn")
    }
}

注意:并非所有代码都在这里(如“setUpLayers()”),如果需要我可以提供,我只是认为没有必要。

【问题讨论】:

  • 这是一个错误,已在 iOS 11.0 测试版中修复。

标签: swift spawn


【解决方案1】:

在整个文档中搜索“print("spawn")”,以确保这是您调用该函数的唯一时间。还要检查“testSpawn()”以确保它只被调用一次。此外,不要依赖此打印来计算sceneDidLoad 运行的次数,而是直接在sceneDidLoad 中放置打印。最后,检查以确保您没有创建两次场景。

【讨论】:

  • 打印输出正在检查一个单元被测试了多少次(当我注意到我在移动它时得到了一个统一的“幽灵”,我怀疑这个“幽灵”实际上是第二个单元,因为有时我可以以非常确定的方式移动它,如果它们实际上是相同的单元,这将是有意义的)。
  • 我不知道你的游戏是如何运作的。我需要更多代码来查看,因为您发布的代码只运行该函数一次。您必须在其他地方调用它或创建两次场景。
【解决方案2】:

我也看到了这个并提交了一个错误报告,但苹果回应说这是预期的行为。苹果表示,它先创建一个虚拟场景,然后再创建实际场景。在它第二次运行之前,它会删除第一次所做的任何事情,所以你不应该从中得到任何错误。这个 bug 真的很难重现,我的一个朋友在同一个仓库工作,但没有遇到这个 bug。

【讨论】:

  • 这是有道理的,但没有解释重复的单元。是否有可能它不会擦除在第一个虚拟场景中创建的任何实体?
  • 这绝对有可能,你的节点数是应该的两倍吗?
  • 也可能是场景转换时控制台没有被清除,例如我项目上的控制台现在读取view gameover view,因为当我转换场景时,我会打印应用程序正在显示的场景
【解决方案3】:

如果您正在寻找解决方案,我将 sceneDidLoad 更改为 didMoveToView:(SKView *)view。确保您的 xcode 是最新的。

【讨论】:

    猜你喜欢
    • 2017-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-25
    • 2014-11-25
    相关资源
    最近更新 更多