我想每隔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)")
}
答案 0 :(得分:0)
我建议每次调用addPresent
- 方法时创建一个新的SKSpriteNode。您不必担心内存管理。斯威夫特可以自己处理。只是不要忘记将其从屏幕上删除。