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