2015-10-22 4 views
2

Как я могу удалить свой SKSpriteNode через 5 секунд в моей функции, как это. Я попытался с NSTimer называется функ удалить мои BonusSprite , но после 5 секунд моей аварии приложения:удалить SKSpriteNode через 5 секунд

let timerApparitionBonus = NSTimer.scheduledTimerWithTimeInterval(13, target: self, selector: Selector("ApparitionBonus"), userInfo: nil, repeats: true) 

    } 

    func ApparitionBonus() { 

     var BonusApparitionX = UInt32(self.frame.size.width) 
     var BonusApparitionY = UInt32(self.frame.size.height) 

     BonusApparitionX = arc4random() % BonusApparitionX 
     BonusApparitionY = arc4random() % BonusApparitionY 
     BonusSprite.position = CGPointMake(CGFloat(BonusApparitionX),CGFloat(BonusApparitionY)) 
     BonusSprite.setScale(0.8) 
     self.addChild(BonusSprite) 
    } 

EDIT:

Это мой код от DidMoveToView функционировать, которые удалить мой спрайт.

override func didMoveToView(view: SKView) { 

    physicsWorld.contactDelegate = self 

    //BackGround 

    self.scene?.backgroundColor = UIColor.blackColor() 
    self.addChild(SKEmitterNode(fileNamed: "MyParticle")!) 
    self.scene?.size = CGSize(width: 640, height: 1136) 

    //Placement du Vaisseau : 

    Vaisseau.setScale(2) 
    Vaisseau.position = CGPointMake(self.frame.size.width/2, self.frame.size.height/2) 
    Vaisseau.physicsBody = SKPhysicsBody(rectangleOfSize: Vaisseau.size) 
    Vaisseau.physicsBody?.affectedByGravity = false 
    Vaisseau.physicsBody?.categoryBitMask = PhysicsCategories.Vaisseau 
    Vaisseau.physicsBody?.contactTestBitMask = PhysicsCategories.Meteorites 
    Vaisseau.physicsBody?.contactTestBitMask = PhysicsCategories.Bonus 
    Vaisseau.physicsBody?.dynamic = false 
    self.addChild(Vaisseau) 

    //Timer créer enemis 

    CreationEnemisTimer = NSTimer.scheduledTimerWithTimeInterval(1, target: self, selector: Selector("CreationMeteorites"), userInfo: nil, repeats: true) 

    //Score 

    timerScore = NSTimer.scheduledTimerWithTimeInterval(0.7, target: self, selector: Selector("ScoreUpper"), userInfo: nil, repeats: true) 
    ScoreLabel = UILabel(frame: CGRect(x: 0, y: 0, width: self.frame.size.width/3, height: 20)) 
    ScoreLabel.center = CGPoint(x : self.frame.size.width/2,y : self.frame.size.height/4) 
    ScoreLabel.text = "Score : \(Score)" 
    ScoreLabel.backgroundColor = UIColor(red: 0.1, green: 0.1, blue: 0.1, alpha: 0.3) 
    ScoreLabel.textColor = UIColor.whiteColor() 
    self.view?.addSubview(ScoreLabel) 

    //Aparition des Bonus (timer) 

    let myFunction = SKAction.runBlock({self.ApparitionBonus()}) 
    let wait = SKAction.waitForDuration(5) 
    let remove = SKAction.runBlock({self.removeBonus()}) 

    self.runAction(SKAction.sequence([myFunction, wait, remove])) 
} 

 

func ApparitionBonus() { 

    var BonusApparitionX = UInt32(self.frame.size.width) 
    var BonusApparitionY = UInt32(self.frame.size.height) 

    BonusApparitionX = arc4random() % BonusApparitionX 
    BonusApparitionY = arc4random() % BonusApparitionY 

    BonusSprite.position = CGPointMake(CGFloat(BonusApparitionX),CGFloat(BonusApparitionY)) 
    BonusSprite.setScale(0.8) 

    BonusSprite.physicsBody?.categoryBitMask = PhysicsCategories.Bonus 
    BonusSprite.physicsBody?.contactTestBitMask = PhysicsCategories.Vaisseau 
} 

 

func removeBonus() { 

    BonusSprite.removeFromParent() 
} 

ответ

5

попробовать этот

EDIT: понял, что это не будет удалить спрайт, это будет работать.

class GameScene: SKScene { 
override func didMoveToView(view: SKView) { 
     let myFunction = SKAction.runBlock({()in self.ApparitionBonus()}) 
     let wait = SKAction.waitForDuration(5) 
     let remove = SKAction.runBlock({() in self.removeSprite()}) 
     self.runAction(SKAction.sequence([myFunction, wait, remove])) 
    } 
    func ApparitionBonus() { 
     self.addChild(bonusSprite) 
    } 
    func removeSprite() { 
     bonusSprite.removeFromParent() 
    } 
} 
+1

Вы также можете использовать 'SKAction.fadeOutWithDuration (sec: NSTimeInterval)' вместо 'SKAction.removeFromParent()', если вы хотите, чтобы он исчезал, а не исчезал внезапно. Он автоматически вызывает 'removeFromParent()' после того, как он анимировал 'alpha'. – Gliderman

+0

Я думаю, что вы забудете() после себя. ApparitionBonus и self.removeSprite? Поскольку у меня есть некоторые ошибки в моей компиляции –

+0

И когда я пытаюсь использовать свой код, у меня есть ошибка, когда мой бонус появляется так: 2015-10-22 20: 40: 19.801 SpaceSurvival [1828: 85702] *** Прекращение приложения из-за неотображаемого exception 'NSInvalidArgumentException', причина: 'Принято для добавления SKNode, у которого уже есть родитель: name:' (null) 'texture: [ «Bonus.png» (100 x 100)] позиция: {243, 606 } scale: {0.80, 0.80} size: {80, 80} anchor: {0.5, 0.5} вращение: 0.00 ' *** Первый стек вызовов броска: –

0

// Если мы создадим SKSpriteNode с помощью функции, вот так!

func gooseWarnningLabelShow() { 
    var spriteNodelabel  = SKSpriteNode(imageNamed: "labelBack2") 
    spriteNodelabel.position = CGPoint(x:CGRectGetMidX(frame), y: frame.size.height*0.90) 
    spriteNodelabel.size  = CGSizeMake(frame.size.width*0.70, frame.size.height*0.06) 
    spriteNodelabel.alpha  = 0.2 
    spriteNodelabel.zPosition = 21.0 
    self.addChild(spriteNodelabel) 
    spriteNodelabel.runAction(
     SKAction.sequence([ 
      SKAction.waitForDuration(5.0), 
      SKAction.removeFromParent() 
      ]) 
    ) 
} 

Используйте эту функцию для создания SKSpriteNode! В этой функции у нас есть SKAction, который выполняется после 5-секундной задержки и удаляет SKSpriteNode!

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