2017-04-21 99 views
0

我正在创建一个游戏,在其中为我的主菜单屏幕创建了一个用户界面,并且我想要应用播放按钮以显示在下图中显示的播放按钮上。我知道如何通过main.storyboard来完成它,但不知道如何在spritekit中。所以,当他们点击播放按钮时,它会转到不同的场景,这是(GameScene)如何在Spritekit/Swift 3中的图像上创建按钮?

这里是图像。

enter image description here

回答

2

可以接近这两种方式。您可以坚持使用SpriteKit并亲自处理交互,或者将SpriteKitUIKit混合使用。在第一种情况下,你会继承SKSpriteNode或创建一个子类SKNodeSKSpriteNode孩子

SKSpriteNode(imageNamed: "...") 

,并通过覆盖touchesBegantouchesEnded函数处理用户交互。或者你可以用代码创建UIButton

UPDATE

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

+0

是不是真的安全混搭'SpriteKit'和'UIKit'框架?会不错... ;-) –

+0

它的种类取决于你的项目。它有时会导致问题添加'UIKit'元素,因为它们出现在'SpriteKit'之上。但在某些情况下工作正常。 –

+0

在按钮/ gui控件的情况下,将它们放在顶部并不是一个大问题。这实际上是你应该想要的。 – BadgerBadger

1

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

在子类中添加委托

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

+0

非常感谢。我会牢记在心。 – Jonathon

相关问题