sceneDidLoad运行两次

时间:2017-03-08 19:15:28

标签: swift spawn

当我运行我的程序时。我在“覆盖func sceneDidLoad()”中输入的代码运行了两次。

E.g。 "testSpawn()" runs twice

注意:我不知道为什么这张图片没有上传,但它显示“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()”),如果需要我可以提供它,我只是觉得它不是必需的。

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

我也看到了这个,并提交了一份错误报告,但苹果回复说这是预期的行为。 Apple表示它会创建一个虚拟场景,然后创建实际场景。在它第二次运行之前,它会在第一次完成任何操作之后,所以你不应该从中获得任何错误。这个错误很难重现,我的一个朋友在同一个存储库工作,但我没有遇到这个错误。

答案 2 :(得分:0)

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