Swift 5秒后取出SKSpriteNode

Swift 5秒后取出SKSpriteNode,swift,sprite-kit,swift2,Swift,Sprite Kit,Swift2,在这样的函数中,我如何在5秒钟后删除我的SKSpriteNode。我尝试了一个名为func delete mybonusprite 但5秒后,我的应用程序崩溃: let timerApparitionBonus = NSTimer.scheduledTimerWithTimeInterval(13, target: self, selector: Selector("ApparitionBonus"), userInfo: nil, repeats: true) } func

在这样的函数中,我如何在5秒钟后删除我的
SKSpriteNode
。我尝试了一个名为func delete my
bonusprite
但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)
    }
编辑:

这是我从
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]))
}

试试这个

编辑:意识到它不会删除精灵,这将工作

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()
    }
}

//如果我们用一个函数创建一个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

如果希望它淡出而不是突然消失,也可以使用
SKAction.fadeOutWithDuration(sec:NSTimeInterval)
而不是
SKAction.removeFromParent()
。在为
alpha
设置动画后,它会自动调用
removeFromParent()
。我想你忘了在self.appeationbonus和self.removeSprite之后调用()?因为我的编译中有一些错误,当我尝试你的代码时,当我的奖金产生如下情况时,我有一个错误:2015-10-22 20:40:19.801 SpaceSurvival[1828:85702]***由于未捕获的异常“NSInvalidArgumentException”终止应用程序,原因是:“试图添加一个已经有父节点的SKNode:name:”(null)“texture:[“Bonus.png”(100 x 100)]位置:{243606}比例:{0.80,0.80}大小:{80,80}锚定:{0.5,0.5}旋转:0.00'***第一次抛出调用堆栈:@MathisDelaunay在您发布的代码中,如果bonusSprite.parent==nil{self.addChild(bonusSprite)}@DanielMihaila,则始终存在问题:/
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()
    }
}
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()
            ])
    )
}