2017-03-08 12 views
0

私は自分のプログラムを実行します。私が "override func sceneDidLoad()"に入れたコードは2回実行されます。sceneDidLoad 2回実行

など。 "testSpawn()" runs twice

注:この画像がアップロードされていない理由はわかりませんが、「発生」は2回発生しています。

このコードは、 "sceneDidLoad()"が呼び出されたときに1回だけ実行する必要があります。

ここでは、 "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」のような)、ここではない、私はそれを供給することができ、必要であれば、私はちょうどそれがneccessaryではないと思います。

+0

これはバグで、iOS 11.0ベータ版で修正されました。 –

答えて

0

"print(" spawn ")"というドキュメント全体を検索して、関数を呼び出す唯一の時間であることを確認してください。また、 "testSpawn()"が一度だけ呼び出されることを確認してください。さらに、このプリントを使用してsceneDidLoadの実行回数をカウントする代わりに、sceneDidLoad内に直接プリントを配置します。最後に、シーンを2回作成していないことを確認します。

+0

プリントオフは、ユニットがテストを生み出した回数をチェックしています(移動したときに私がユニティの "ゴースト"を得ていることに気付いたので、この "ゴースト"は実際には2番目のユニットです私は時には非常に特定の方法でそれを移動することができます。実際には同じ単位であれば意味があります)。 –

+0

あなたのゲームの仕組みはわかりません。あなたが投稿したコードがその機能を一度しか実行しないので、私は見るためにもっとコードが必要です。別の場所に呼び出すか、シーンを2回作成する必要があります。 –

0

私もこれを見て、バグレポートを提出しましたが、リンゴはそれが意図された動作だと答えました。 Appleはダミーのシーンを作成して実際のシーンを作成すると言った。それが2回目に実行される前に、最初に行われたことがなくなるので、エラーは発生しません。バグは本当に再現するのが難しいですが、私の友人の1人は同じリポジトリを使っていましたが、バグは経験しませんでした。

+0

それは理にかなっていますが、複製されたユニットについては説明していません。最初のダミーシーンで作成されたエンティティは消去されない可能性がありますか? –

+0

これは間違いなく可能ですが、あなたのノード数は2倍になるでしょうか? – cooperstandard

+0

シーンが移行されたときにコンソールがクリアされないこともあります。たとえば、プロジェクトのコンソールでは、現在ビューのゲームビューを表示しています。 – cooperstandard

0

解決策を探している場合は、sceneDidLoadをdidMoveToView:(SKView *)ビューに変更しました。 xcodeが最新であることを確認してください。

関連する問題