【问题标题】:SpriteKit GameScene function won't add SKSpriteNode after being called by buttonSpriteKit GameScene 函数被按钮调用后不会添加 SKSpriteNode
【发布时间】:2015-07-11 21:31:38
【问题描述】:

我检查了 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()
}

【问题讨论】:

    标签: swift projectile


    【解决方案1】:

    这部分:

    @IBAction func firePressed(){
        GameScene().fireLaser()
    }
    

    ...您的意思是实例化一个新的GameScene 并立即调用fireLaser() 吗?可能没有先在 SKView 中呈现场景?

    我认为正在发生的事情是,每当按下按钮时,您都会运行 firePressed() 方法,这将创建 GameScene 对象的新实例(GameScene() 部分),在该实例上运行 fireLaser() 方法,然后完成它。问题是,它是另一个游戏场景,也就是说,不是你的 SKView 中的那个。

    相反,您应该在已经存在的场景上运行fireLaser()

    例如类似:

    @IBAction func firePressed(){
        skView.scene?.fireLaser()
    }
    

    【讨论】:

    • 好吧,我在游戏视图控制器上添加了一个按钮,我希望它作为一个触发按钮,我的精灵在按下它时会发射一个弹丸,这是最好的方法吗?
    • 我的回复不够清楚。我编辑了,请看一下。
    • 对不起,我是 spritekit 的新手,但是当我复制代码并将其替换为 skView.scene?.fireLaser() 时,出现“使用未解析的标识符 skView”的错误
    • skView 只是一个例子。您应该在视图控制器中使用您为 SKView 创建(或应该创建)的 outlet 的名称。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多