2017-03-08 85 views
0

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

E.g. "testSpawn()" runs twice

注:我不知道为什么这幅画没有上传,但它显示“重生”两次发生。

此代码应该只在调用“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()”),如果需要,我可以提供,我只是不认为这里有必要。

+0

这是一个错误,已在iOS 11.0 beta中修复。 –

回答

0

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

+0

打印关闭是检查一个单元测试产生的次数(因为我注意到当我移动它时我得到了团结的“鬼魂”,我怀疑这个“鬼魂”实际上是第二个单元,就像有时我可以用某种方式移动它,如果它们实际上是相同的单位,那么这是有意义的)。 –

+0

我不知道你的游戏是如何工作的。我需要更多的代码才能看,因为你发布的代码只运行一次该函数。你必须在别的地方叫它或者创建两次场景。 –

0

我也看到了这个,并提交了一个错误报告,但苹果回应说,这是预期的行为。苹果表示,它会创建一个虚拟场景,然后创建实际场景。在它第二次运行之前,它会在第一次完成任何事情之后,不应该从它那里得到任何错误。该错误真的很难重现,我的一个朋友正在使用同一个存储库,但没有遇到错误。

+0

这是有道理的,但不解释重复的单位。它可能不会擦除在第一个虚拟场景中创建的任何实体吗? –

+0

这绝对有可能,你的节点数是它应该是多少? – cooperstandard

+0

也可能是场景转换时控制台没有被清除,例如我的项目中的控制台现在读取'view gameover view',因为当我转换场景时,我会打印出应用显示的场景 – cooperstandard

0

我改变了sceneDidLoad为didMoveToView:(SKView *)视图,如果你正在寻找一个解决方案。确保你的xcode是最新的。