如何在Spritekit/Swift 3中的图像上创建按钮?

如何在Spritekit/Swift 3中的图像上创建按钮?,swift,sprite-kit,Swift,Sprite Kit,我正在创建一个游戏,在这个游戏中,我为我的主菜单屏幕创建了一个UI,我想应用play按钮来显示下图所示的play按钮。我知道如何通过main.storyboard实现,但不知道如何在spritekit中实现。因此,当他们点击play按钮时,它将转到另一个场景,即(游戏场景) 这是图片 您可以通过两种方式来实现这一点。您要么坚持使用SpriteKit并自己处理交互,要么将SpriteKit与UIKit混合使用。在第一种情况下,您将使用SKSpriteNode子类创建SKSpriteNode子类,或

我正在创建一个游戏,在这个游戏中,我为我的主菜单屏幕创建了一个UI,我想应用play按钮来显示下图所示的play按钮。我知道如何通过main.storyboard实现,但不知道如何在spritekit中实现。因此,当他们点击play按钮时,它将转到另一个场景,即(游戏场景)

这是图片


您可以通过两种方式来实现这一点。您要么坚持使用
SpriteKit
并自己处理交互,要么将
SpriteKit
UIKit
混合使用。在第一种情况下,您将使用
SKSpriteNode
子类创建
SKSpriteNode
子类,或者使用
SKSpriteNode
子类创建一个
SKNode
子类

SKSpriteNode(imageNamed: "...")
并通过覆盖
触摸开始
触摸结束
功能来处理用户交互。或者您可以使用
ui按钮
创建代码

更新


决定快速实现一个
SpriteKit
按钮。您可以尝试,但请记住,这是一个快速的首次提交:)

我不会为您的场景创建一个包含按钮的图像。没有这样的可伸缩性空间。我将创建这些按钮作为SKSpriteNode的子类,并将它们作为对象添加到场景中。这样,如果您在按钮周围移动,就不必重做背景图像@Konrad.bajtyngier的实现走在了正确的道路上,我在我所有的游戏中都使用了非常相似的东西(它成为一个不可或缺的对象,可以从一个游戏复制到另一个游戏)。他的实现使用闭包()->()来执行操作,在中还有另一个选项,您也可以在子类中使用

在子类中添加一个委托

protocol ButtonDelegate: NSObjectProtocol {
    func buttonWasPressed(sender: Key)
}

weak var buttonDelegate: ButtonDelegate!
当您创建按钮时,只需将它们作为按钮的代理添加到场景中

button.buttonDelegate = self
然后在场景中添加按钮按按钮的func。这样,您将知道按下了什么按钮,并相应地处理它,而不必担心使用闭包会保留对象

我不觉得有一种方法比另一种方法好,但是你应该强烈考虑对你的按钮进行分类,并从背景图像中删除按钮背景。 请参阅我的答案和代码这里的全部细节


混合搭配
SpriteKit
UIKit
框架真的安全吗?很好…;-)这取决于你的项目。它有时会导致问题添加
UIKit
元素,因为它们出现在
SpriteKit
的顶部。但在某些情况下效果很好。对于按钮/gui控件,将它们放在上面并不是什么大问题。这实际上是你想要的。@konrad.bajtyngier很好的自定义对象,我也使用了一个非常类似的对象。您是否考虑过使用标题标签的惰性实现?它会清理你对这个对象的初始化。@ RyMySuk好主意,我会考虑下一个提交,谢谢!