2017-03-08 118 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是最新的。