gpt4 book ai didi

macos - 在 SpriteKit 中使用 NSButton

转载 作者:搜寻专家 更新时间:2023-11-01 05:31:27 25 4
gpt4 key购买 nike

我是 Cocoa 程序员的新手,试图通过修改默认的 OS X 代码来学习一些关于 Swift/Cocoa/SpriteKit 的知识。所以这可能是一个基本问题,但我一直无法找到解决方案。

我想添加功能来删除您用鼠标单击后获得的所有 Spaceship Sprite ,因此我将这些方法添加到类:GameScene。

override func keyDown(theEvent: NSEvent!) {
if (theEvent.characters) == "p" {
removeSprites()
}
}

func removeSprites() {
self.removeAllChildren()
println(self) // Here to track down my problem.
}

所以当我按'p'和println(self)时它起作用了告诉我self<SKScene> name:'(null)' frame:{{0, 0}, {1024, 768}}


接下来,我在 Interface Builder 的 SKView 中设置了一个 NSButton,并将其连接到 class: AppDelegate 中的 IBAction。

@IBAction func buttonAction(sender: AnyObject) {
GameScene().removeSprites()
}

然而这次 Sprite 没有被移除并且 println 报告

<SKScene> name:'(null)' frame:{{0, 0}, {1, 1}}

所以我对这个“其他”SKScene 感到困惑。

如何编写 NSButton 代码来影响 Sprite ?

最佳答案

GameScene() 是您类的一个新实例,而不是您之前的方法中“self”所指的实例。

您的 IBAction 在 AppDelegate 中,而不是在 GameScene 中,因此您需要保留对场景的引用 - 如果您使用的是默认模板,则应该在 applicationDidFinishLaunching 中引用它...等一下作为一个属性,然后你可以在你的 Action 中说 self.scene!.removeSprites()。

var scene: GameScene? = nil

func applicationDidFinishLaunching(aNotification: NSNotification?) {
if let scene = GameScene.unarchiveFromFile("GameScene") as? GameScene {
self.scene = scene
// ...
}
}
@IBAction func buttonAction(sender: AnyObject) {
self.scene!.removeSprites()
}

关于macos - 在 SpriteKit 中使用 NSButton,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24426179/

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