2015-08-10 4 views
0

Все в порядке, пока я не использую NSTimer для запуска дерева, чтобы изображения дерева исчезли. Я использую SKview, чтобы показать физику, тогда я узнаю, что код все еще запущен, только изображение исчезло. Как я могу это исправить?Как исправить эту проблему NSTimer?

Часть 1

class PlayScene: SKScene { 

    var BG6 = SKSpriteNode() 

    var balloon = SKSpriteNode() 
    var tree1 = SKSpriteNode() 
    var tree2 = SKSpriteNode() 

Часть 2

override func didMoveToView(view: SKView) { 

     MakeBG() 

     // add balloon 

     var ballontexture = SKTexture(imageNamed: "Balloon.png") 
     balloon = SKSpriteNode(texture: ballontexture) 
     balloon.position = CGPoint(x: self.frame.size.width/2, y: self.frame.size.height/5) 
     balloon.physicsBody = SKPhysicsBody(rectangleOfSize: balloon.size) 
     balloon.physicsBody?.dynamic = true 
     balloon.physicsBody?.allowsRotation = false 
     balloon.zPosition = 5 

     self.addChild(balloon) 

     var timer = NSTimer.scheduledTimerWithTimeInterval(3, target: self, selector: Selector("MakeTree"), userInfo: nil, repeats: true) 

     var ground = SKNode() 
     ground.position = CGPointMake(0, 0) 
     ground.physicsBody = SKPhysicsBody(rectangleOfSize: CGSizeMake(self.frame.size.width,1)) 
     ground.physicsBody?.dynamic = false 



     self.addChild(ground) 
} 

Часть 3

func MakeBG(){ 

     // chen hinh nen 
     //BG1 
     var BG1texture = SKTexture(imageNamed: "BG2") 
     var BG1 = SKSpriteNode(texture: BG1texture) 
     BG1.position = CGPoint(x: self.frame.size.width/2, y: self.frame.size.height/2) 
     BG1.size.height = self.size.height 
     var BG1move = SKAction.moveToY(-self.frame.size.height, duration: 90) 
     BG1.runAction(BG1move) 
     self.addChild(BG1) 

     //BG2 
     var BG2texture = SKTexture(imageNamed: "BG3") 
     var BG2 = SKSpriteNode(texture: BG2texture) 
     BG2.position = CGPoint(x: self.frame.size.width/2, y: self.frame.size.height/2 + self.frame.size.height) 
     BG2.size.height = self.size.height 
     var BG2move = SKAction.moveToY(-self.frame.size.height, duration: 140) 
     BG2.runAction(BG2move) 
     self.addChild(BG2) 

     //BG3 
     var BG3texture = SKTexture(imageNamed: "BG4") 
     var BG3 = SKSpriteNode(texture: BG3texture) 
     BG3.position = CGPoint(x: self.frame.size.width/2, y: self.frame.size.height/2 + self.frame.size.height*2) 
     BG3.size.height = self.size.height 
     var BG3move = SKAction.moveToY(-self.frame.size.height, duration: 195) 
     BG3.runAction(BG3move) 
     self.addChild(BG3) 

     //BG4 
     var BG4texture = SKTexture(imageNamed: "BG5") 
     var BG4 = SKSpriteNode(texture: BG4texture) 
     BG4.position = CGPoint(x: self.frame.size.width/2, y: self.frame.size.height/2 + self.frame.size.height*3) 
     BG4.size.height = self.size.height 
     var BG4move = SKAction.moveToY(-self.frame.size.height, duration: 250) 

     BG4.runAction(BG4move) 
     self.addChild(BG4) 

     //BG5 
     var BG5texture = SKTexture(imageNamed: "BG6") 
     var BG5 = SKSpriteNode(texture: BG5texture) 
     BG5.position = CGPoint(x: self.frame.size.width/2, y: self.frame.size.height/2 + self.frame.size.height*4) 
     BG5.size.height = self.size.height 
     var BG5move = SKAction.moveToY(-self.frame.size.height, duration: 305) 

     BG5.runAction(BG5move) 
     self.addChild(BG5) 

     // BG6 

     var BG6texture = SKTexture(imageNamed: "BG7") 
     BG6 = SKSpriteNode(texture: BG6texture) 

     BG6.position = CGPoint(x: self.frame.size.width/2, y: self.frame.size.height/2 + self.frame.size.height*5 + self.frame.size.height*5) 
     BG6.size.height = self.size.height 

     BG6.runAction(SKAction.moveTo(CGPoint(x: self.size.width/2 , y: self.size.height/2), duration: 276.5)) 


     self.addChild(BG6) 

    } 

    func MakeTree(){ 


      // between 

      let between = balloon.size.width 
      // random 
      var movementAmount = arc4random() % UInt32(self.frame.size.height/2) 
      var treeoffset = CGFloat(movementAmount) - self.frame.size.height/4 
      // move tree 

      var treemove = SKAction.moveByX(0, y: -self.frame.size.width*2, duration: NSTimeInterval(self.frame.size.height/50)) 
      var treeremove = SKAction.removeFromParent() 
      var treemoveandremove = SKAction.sequence([treemove, treeremove]) 

      // add tree1 

      var tree1texture = SKTexture(imageNamed: "C2.png") 
      tree1 = SKSpriteNode(texture: tree1texture) 
      tree1.position = CGPointMake(CGRectGetMidX(self.frame) - tree1texture.size().width/2 - between + treeoffset, CGRectGetMidY(self.frame) + self.frame.size.height) 
      tree1.runAction(treemoveandremove) 
      tree1.physicsBody = SKPhysicsBody(rectangleOfSize: tree1.size) 
      tree1.physicsBody?.dynamic = false 


      self.addChild(tree1) 

      // add tree2 

      var tree2texture = SKTexture(imageNamed: "C1.png") 
      tree2 = SKSpriteNode(texture: tree2texture) 
      tree2.position = CGPointMake(CGRectGetMidX(self.frame) + tree2texture.size().width/2 + between + treeoffset, CGRectGetMidY(self.frame) + self.frame.size.height) 
      tree2.runAction(treemoveandremove) 
      tree2.physicsBody = SKPhysicsBody(rectangleOfSize: tree2.size) 
      tree2.physicsBody?.dynamic = false 
     [enter image description here][1] 
      self.addChild(tree2) 



    } 

ответ

1

Если я понял ваш вопрос правильно, то вы хотите знать, почему ваш "дерево" больше нет ,

Оказывается, что ваш MakeTree() метод перемещает все дерево спрайт узлов с экрана:

var treemove = SKAction.moveByX(0, y: -self.frame.size.width*2, duration: NSTimeInterval(self.frame.size.height/50)) 

Кроме того, вы не должны использовать NSTimers в SpriteKit. Вместо этого используйте SKAction.waitForDuration. Пример:

let delay = SKAction.waitForDuration(3) 
someNode.runAction(delay) { 

    //run code here after 3 seconds 

} 
Смежные вопросы