当玩家再次玩游戏时,如何修复SpriteKit Swift上的分享按钮分享按钮出现在游戏场景中?

时间:2016-09-11 02:11:15

标签: swift sprite-kit

这是我和#34;分享"的代码。按钮:

ShareButton = UIButton(frame: CGRect(x: 0, y:0, width: view.frame.size.width / 3, height: 60))

ShareButton.center = CGPointMake(CGRectGetMidX(self.frame), 3*CGRectGetHeight(self.frame)/4)

ShareButton.setTitle("Share", forState: UIControlState.Normal)
ShareButton.setTitleColor(UIColor.whiteColor(), forState: UIControlState.Normal)
ShareButton.addTarget(self, action: ("pressed:"), forControlEvents: .TouchUpInside)

self.view?.addSubview(ShareButton) 

PS:我的分享按钮有效但当用户分享他的分数并想再次播放时,分享按钮会出现在游戏场景中。

2 个答案:

答案 0 :(得分:3)

制作SpriteKit游戏时的第一条规则是尝试不使用UIKit。 应使用SpriteKit API(SKLabelNodes,SKSpriteNodes,SKNodes等)直接在SKScenes中创建所有UI。 有一些例外,比如可能使用UICollectionViews进行大规模的级别选择菜单,但基本的UI不应该使用UIKit来完成。

所以你应该使用SKSpriteNodes制作你的按钮并将它们直接添加到你想要的SKScene。

有很多关于如何做到这一点的谷歌教程,一个简单的就是这个

https://nathandemick.com/2014/09/buttons-sprite-kit-using-swift/

更完整的一个查看苹果样本游戏" DemoBots"或者在gitHub上查看这些很酷的项目。

https://github.com/nguyenpham/sgbutton

https://github.com/jozemite/JKButtonNode

在SpriteKit游戏中,你只有1个视图控制器(GameViewController),它将呈现你所有的SKScenes(GameScene,MenuScene等)。如果您使用UIKit元素,它们会被添加到GameViewController中,因此它们将显示在所有场景中(例如您的分享按钮)。

self.view?.addSubview(shareButton) // self.view is your GameViewController

如果您的游戏拥有超过1个SKScene和相当多的按钮,那么这将是疯狂的管理。

另一方面,如果您使用SpriteKit API,并且因为当您输入时,每个SKScene都以干净的状态启动,您不必担心这一点。

如果您坚持使用UIKit,则必须在转换到游戏场景之前移除或隐藏共享按钮,然后取消隐藏或在需要时再次添加。

 shareButton.isHidden = true

 shareButton.removeFromSuperview()

最后,作为良好的做法,您的属性应该以小写字母而不是大写字母开头

shareButton = ...

希望这有帮助

答案 1 :(得分:2)

如上所述,您应该尝试不使用UIKit作为UIKit应用程序,而不是游戏。

您可以使用我的JKButtonNode课程来创建按钮。类文件是正确的here。最好的部分是它们与SpriteKit完全兼容,因为它们由SKTexture和SKLabelNode组成。

首先,在班级的顶层创建按钮。

var shareButton: JKButtonNode?

然后在您的didMoveToView或您配置按钮的任何位置。 (除了init方法在初始化之前调用类本身的函数不起作用)输入以下内容。

let shareButtonBackground = SKShapeNode(rect: CGRect(x: 0, y: 0, width: view.frame.size.width / 3, height: 60))
shareButton = JKButtonNode(title: "Share", background: SKView().textureFromNode(shareButtonBackground)!, action: shareButtonAction)
shareButton?.title.fontColor = UIColor.whiteColor()
shareButton?.canChangeState = false
shareButton?.canPlaySounds = false
addChild(shareButton!)

您将收到错误,因为您没有声明按钮的操作,但只是将其添加到您班级的任何位置。

func shareButtonAction(button: JKButtonNode) {
    print("The share button has been pressed.")
}

这些按钮的工作方式与UIButtons类似。如果你愿意,他们甚至可以改变状态。当然,当您不想显示它时,只需将其从父项中删除即可。您还可以使其更具可定制性;只看我给你的第一个链接。示例截图。您也可以通过调用setTitleProperties来更改标题属性。

Share Button Image