0
我爲這個令人困惑的問題題目寫了一個appologise,但我不太確定如何說出我的問題。我的最終目標是在創建一段時間後刪除一個SKSpriteNode。但是,有一個小的併發症。使用以下代碼如何在創建另一個相同var名稱後與SKSpriteNode進行交互?
func remove() {
laser.removeFromParent()
}
runAction(
SKAction.sequence([
SKAction.waitForDuration(5.0),
SKAction.runBlock(remove)
])
)
我可以刪除名爲'laser'的SKSpriteNode。當我調用我的功能一次,fireLasers(),一切運行平穩,5秒鐘後激光消失。問題是當我在5秒內調用兩次時。發生這種情況時,第一臺激光器會無限期地停留,第二臺激光器會比預期的早消失。我明白爲什麼會發生這種情況,但想知道是否有解決方法。這裏是GameScene的代碼,它創建了世界,背景圖片,玩家Sprite,並定義了fireLasers函數。 ViewController中有很多東西與精靈的速度和方向一致,但我希望這足以找到一個解決方案。
import SpriteKit
class GameScene: SKScene {
var player = SKSpriteNode()
var world = SKShapeNode()
var worldTexture = SKSpriteNode()
var laser = SKShapeNode()
override func didMoveToView(view: SKView) {
self.anchorPoint = CGPointMake(0.5, 0.5)
self.size = CGSizeMake(view.bounds.size.width, view.bounds.size.height)
// Add world
world = SKShapeNode(rectOfSize: CGSizeMake(7000, 7000))
world.physicsBody = SKPhysicsBody(edgeLoopFromPath: world.path!)
world.fillColor = SKColor.blackColor()
self.addChild(world)
// Add Background Image
worldTexture = SKSpriteNode(imageNamed: "grid")
worldTexture.size = CGSize(width: 7000, height: 7000)
world.addChild(worldTexture)
// Add player
player = SKSpriteNode(imageNamed: "Spaceship")
player.size = CGSize(width: 50, height: 50)
player.physicsBody = SKPhysicsBody(rectangleOfSize: CGSize(width: 50, height: 50))
player.physicsBody?.affectedByGravity = false
player.physicsBody?.dynamic = true
world.addChild(player)
}
override func update(currentTime: CFTimeInterval) {
world.position.x = -player.position.x
world.position.y = -player.position.y
}
func fireLasers() {
laser = SKShapeNode(rectOfSize: CGSizeMake(10, 50))
laser.physicsBody = SKPhysicsBody(rectangleOfSize: CGSize(width: 10, height: 50))
laser.position.x = player.position.x
laser.position.y = player.position.y + CGFloat(50)
laser.fillColor = SKColor.redColor()
laser.physicsBody?.dynamic = true
laser.physicsBody?.affectedByGravity = false
world.addChild(laser)
func remove() {
laser.removeFromParent()
}
runAction(
SKAction.sequence([
SKAction.waitForDuration(5.0),
SKAction.runBlock(remove)
])
)
}
}
你的先生是一個嚮導,感謝您的幫助兄弟! – Austin