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

时间:2017-04-21 08:11:57

标签: swift sprite-kit

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

  

这是图像。

enter image description here

2 个答案:

答案 0 :(得分:2)

你可以通过两种方式来解决这个问题。要么坚持SpriteKit并自己处理互动,要么将SpriteKitUIKit混合。在第一种情况下,您可以继承SKSpriteNode或创建一个SKNode子类与SKSpriteNode子项

SKSpriteNode(imageNamed: "...")

通过覆盖touchesBegantouchesEnded函数来处理用户互动。或者您使用代码创建的UIButton

<强>更新

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

答案 1 :(得分:1)

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

你的子类中的

添加一个委托

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

weak var buttonDelegate: ButtonDelegate!

当你创建按钮时,只需将它们添加为按钮的代表。

button.buttonDelegate = self

然后在场景中添加buttonWasPressed func。通过这种方式,您将知道按下了什么按钮并相应地处理它,而不必担心使用闭包来保留对象。

我觉得一种方法比另一种方法更好,但你应该强烈考虑对按钮进行子类化,并从背景图像中删除按钮背景。

请在此处查看我的答案和代码以获取详细信息

Make touch-area for SKLabelNode bigger for small characters