SpriteKit GameScene函数在被按钮调用后不会添加SKSpriteNode
SpriteKit GameScene function won't add SKSpriteNode after being called by button
我检查了 fireLaser() 函数是否被调用,因为它可以访问并打印到控制台,但激光从未添加到场景中。如果我将代码复制并粘贴到 fireLaser() 函数中,它将在 didMoveToView() 函数中运行。
let character = SKSpriteNode(imageNamed: "monkey")
let laser = SKSpriteNode(imageNamed: "bullet_yellow")
override func didMoveToView(view: SKView) {
var background : SKSpriteNode = SKSpriteNode (imageNamed: "space.png")
background.position = CGPointMake(self.frame.size.width/2, self.frame.size.height/2)
background.size = self.frame.size
self.addChild(background)
character.position = CGPoint(x: size.width * 0.5, y: size.height * 0.25)
addChild(character)
//Shoots Laser From Character
func fireLaser(){
laser.position = character.position
addChild(laser)
let laserDestination = CGPoint(x: character.position.x, y: self.size.height)
let actionMove = SKAction.moveTo(laserDestination, duration: 2.0)
let actionMoveDone = SKAction.removeFromParent()
laser.runAction(SKAction.sequence([actionMove, actionMoveDone]))
println ("check")
}
//来自游戏视图控制器
@IBAction func firePressed(){
GameScene().fireLaser()
}
这部分:
@IBAction func firePressed(){
GameScene().fireLaser()
}
...您的意思是实例化一个新的 GameScene
并立即调用 fireLaser()
吗?可能没有先在 SKView 中呈现场景?
我认为正在发生的事情是,每当按下按钮时,您都会使用 运行 firePressed()
方法,这将创建一个新的 GameScene 对象实例(GameScene()
部分),运行 fireLaser()
该实例上的方法,然后完成它。问题是,它是 另一个 游戏场景,也就是说,不是你在 SKView 中的场景。
相反,您应该 运行 fireLaser()
在 已经 的场景中。
例如类似于:
@IBAction func firePressed(){
skView.scene?.fireLaser()
}
我检查了 fireLaser() 函数是否被调用,因为它可以访问并打印到控制台,但激光从未添加到场景中。如果我将代码复制并粘贴到 fireLaser() 函数中,它将在 didMoveToView() 函数中运行。
let character = SKSpriteNode(imageNamed: "monkey")
let laser = SKSpriteNode(imageNamed: "bullet_yellow")
override func didMoveToView(view: SKView) {
var background : SKSpriteNode = SKSpriteNode (imageNamed: "space.png")
background.position = CGPointMake(self.frame.size.width/2, self.frame.size.height/2)
background.size = self.frame.size
self.addChild(background)
character.position = CGPoint(x: size.width * 0.5, y: size.height * 0.25)
addChild(character)
//Shoots Laser From Character
func fireLaser(){
laser.position = character.position
addChild(laser)
let laserDestination = CGPoint(x: character.position.x, y: self.size.height)
let actionMove = SKAction.moveTo(laserDestination, duration: 2.0)
let actionMoveDone = SKAction.removeFromParent()
laser.runAction(SKAction.sequence([actionMove, actionMoveDone]))
println ("check")
}
//来自游戏视图控制器
@IBAction func firePressed(){
GameScene().fireLaser()
}
这部分:
@IBAction func firePressed(){
GameScene().fireLaser()
}
...您的意思是实例化一个新的 GameScene
并立即调用 fireLaser()
吗?可能没有先在 SKView 中呈现场景?
我认为正在发生的事情是,每当按下按钮时,您都会使用 运行 firePressed()
方法,这将创建一个新的 GameScene 对象实例(GameScene()
部分),运行 fireLaser()
该实例上的方法,然后完成它。问题是,它是 另一个 游戏场景,也就是说,不是你在 SKView 中的场景。
相反,您应该 运行 fireLaser()
在 已经 的场景中。
例如类似于:
@IBAction func firePressed(){
skView.scene?.fireLaser()
}