gpt4 book ai didi

swift - SpriteKit GameScene 函数被按钮调用后不会添加 SKSpriteNode

转载 作者:行者123 更新时间:2023-11-30 14:14:27 32 4
gpt4 key购买 nike

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

//来自游戏 View Controller

@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()
}

关于swift - SpriteKit GameScene 函数被按钮调用后不会添加 SKSpriteNode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31362049/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com