如何在Spritekit/Swift 3中的图像上创建按钮?
我正在创建一个游戏,在其中为我的主菜单屏幕创建了一个用户界面,并且我想要应用播放按钮以显示在下图中显示的播放按钮上。我知道如何通过main.storyboard来完成它,但不知道如何在spritekit中。所以,当他们点击播放按钮时,它会转到不同的场景,这是(GameScene)如何在Spritekit/Swift 3中的图像上创建按钮?
这里是图像。
可以接近这两种方式。您可以坚持使用SpriteKit
并亲自处理交互,或者将SpriteKit
与UIKit
混合使用。在第一种情况下,你会继承SKSpriteNode
或创建一个子类SKNode
用SKSpriteNode
孩子
SKSpriteNode(imageNamed: "...")
,并通过覆盖touchesBegan
或touchesEnded
函数处理用户交互。或者你可以用代码创建UIButton
。
UPDATE
决定做一个快速的通用实施SpriteKit
按钮。你可以尝试here,但请记住它是一个快速的第一次提交:)
我不会为你的场景有一个包含它的按钮的单个图像。这样的可扩展性没有余地。我将创建这些按钮作为SKSpriteNode的子类,并将它们作为对象添加到场景中。这样,如果你移动按钮,你不必重做你的背景图像。 @ Konrad.bajtyngier在他的实现中走在了正确的道路上,我在所有游戏中都使用了非常相似的东西(它成为从游戏到游戏复制的不可缺少的对象)。他的实现使用闭包() - >()来执行这些操作,另外还有一个选项可以在你的子类中使用。
在子类中添加委托
protocol ButtonDelegate: NSObjectProtocol {
func buttonWasPressed(sender: Key)
}
weak var buttonDelegate: ButtonDelegate!
,当您创建按钮,只需添加它们场景按钮的代表。
button.buttonDelegate = self
然后在场景中添加buttonWasPressed func。这样你就可以知道按下了哪个按钮并相应地处理它,而不必担心通过使用闭包来保留你的对象。
我不觉得有一种方法比另一种方法更好,但是您应该强烈考虑对您的按钮进行分类,并从背景图像中删除按钮背景。
请参阅我的答案和代码在这里的全部细节
非常感谢。我会牢记在心。 – Jonathon
是不是真的安全混搭'SpriteKit'和'UIKit'框架?会不错... ;-) –
它的种类取决于你的项目。它有时会导致问题添加'UIKit'元素,因为它们出现在'SpriteKit'之上。但在某些情况下工作正常。 –
在按钮/ gui控件的情况下,将它们放在顶部并不是一个大问题。这实际上是你应该想要的。 – BadgerBadger