从屏幕上删除精灵后,我无法将其生成 - Swift,SpriteKit

时间:2015-01-26 18:47:06

标签: swift xcode6

我想每隔3秒在屏幕上产生一个精灵,并且在碰撞后我想要从屏幕上移除精灵。每当从屏幕上移除精灵时,它都不会返回到屏幕。

这是产卵代码:

在DidMoveToView中的

var presentSpawnTimer = NSTimer.scheduledTimerWithTimeInterval(presentSpawnSpeed, target: self, selector: Selector("addPresent"), userInfo: nil, repeats: true)

>

func addPresent() {
    var presentSpriteImage: String!

    // Set the present's initial coordinates
    var presentSpawnY: CGFloat!
    var presentEndY: CGFloat!

    presentSpawnY = frame.size.width + (present.size.height / 2)
    presentEndY = -(present.size.height / 2)

    let minSpawnX = frame.size.width / 3
    let maxSpawnX = (frame.size.width * 0.9) - present.size.width / 2
    let spawnXRange = UInt32(maxSpawnX - minSpawnX)
    let presentSpawnX = CGFloat(arc4random_uniform(spawnXRange)) + minSpawnX
    present.position = CGPoint(x: presentSpawnX, y: presentSpawnY)

    addChild(present)

    // Set the present's speed
    let minMoveTime = 2
    let maxMoveTime = 3
    let moveTimeRange = maxMoveTime - minMoveTime
    let moveTime = NSTimeInterval((Int(arc4random_uniform(UInt32(moveTimeRange))) + minMoveTime))

    // Send the present on its way
    let moveAction = SKAction.moveToY(presentEndY, duration: moveTime)
    let cleanUpAction = SKAction.removeFromParent()
    present.runAction(SKAction.sequence([moveAction, cleanUpAction]))
}

从屏幕中删除精灵的代码:

func presentDidCollideWithSprite(present:SKSpriteNode, sprite:SKSpriteNode) {
    self.present.removeFromParent()
    score += 1
    NSLog("Score: \(score)")
}

1 个答案:

答案 0 :(得分:0)

我建议每次调用addPresent - 方法时创建一个新的SKSpriteNode。您不必担心内存管理。斯威夫特可以自己处理。只是不要忘记将其从屏幕上删除。