2017-06-11 6 views
1

私はシューティングゲームを構築しています。私は10秒ごとにバリアを生成し、3秒後にそれを削除したいと思います。私はそれが時間遅れの後にオブジェクトをスポーンする方法3 spritekit

   let TimeBeforeAdd = DispatchTime.now() + 5 

       DispatchQueue.main.asyncAfter(deadline: TimeBeforeAdd) { 

       self.Barrier.position = self.barrierPos 

       self.addChild(self.Barrier) 

       self.barrierAdded = true 





    } 

    if barrierAdded == true { 

     let RemoveTime = DispatchTime.now() + 3 

     DispatchQueue.main.asyncAfter(deadline: RemoveTime) { 

      self.Barrier.removeFromParent() 

      self.barrierAdded = false 

     } 


    } 

が、それは10秒後に実行したときに、私はそれが任意の助けのための「バリア」の感謝の複数のインスタンスを追加したというエラーを取得するようなものだと思います。

答えて

1

ディスパッチタイマーの非常にクールなアイデアです。しかし、多くのがあります。ここに行く:

// Inside of your gamescene: 
func spawnThingEveryTenSecondsThenDeleteAfterThree() { 

    func spawnShootyThing() { /* input your code here */ } 
    func despawnShootyThing() { /* input your code here */ } 

    let wait10 = SKAction.wait(forDuration: 10) 
    let wait3 = SKAction.wait(forDuration: 3) 
    let spawn = SKAction.run { spawnShootyThing() } 
    let despawn = SKAction.run { despawnShootyThing() } 

    let action = SKAction.sequence([wait10, spawn, wait3, despawn]) 

    // If you don't want this action to run forever, then remove this action! 
    let forever = SKAction.repeatForever(action) 

    self.run(forever) 
} 
+0

ありがとうございます。非常に役立ちます – c3pNoah

関連する問題