Sprite kit 在SpriteKit上暂停游戏场景后尝试显示恢复按钮
我正在使用Xcode 8和Swift 3,试图在暂停游戏后在场景中显示“恢复游戏”按钮,但由于一切都停止了,我还没有找到正确的方法。我在这一页上听从了他的建议,但那没有帮助 当点击“我的暂停”按钮时,它运行暂停功能,代码如下:Sprite kit 在SpriteKit上暂停游戏场景后尝试显示恢复按钮,sprite-kit,swift3,xcode8,resume,pause,Sprite Kit,Swift3,Xcode8,Resume,Pause,我正在使用Xcode 8和Swift 3,试图在暂停游戏后在场景中显示“恢复游戏”按钮,但由于一切都停止了,我还没有找到正确的方法。我在这一页上听从了他的建议,但那没有帮助 当点击“我的暂停”按钮时,它运行暂停功能,代码如下: func pauseGame() { self.isPaused = true self.physicsWorld.speed = 0 self.speed = 0.0 self.scene?.view?.isPaused = true }
func pauseGame() {
self.isPaused = true
self.physicsWorld.speed = 0
self.speed = 0.0
self.scene?.view?.isPaused = true
}
这似乎有点过分,但这是有效的。如果我删除
self.scene?.view?.isPaused = true
通过我的暂停功能,我可以显示点击恢复按钮,但我仍然可以与场景中的某些SpriteKit节点进行交互。我正在制作一个太空射击游戏,这样用户仍然可以移动间谍飞船并点击开火,尽管子弹在我恢复场景之前不会移动
我曾想过在pause函数中添加一个布尔“true”,并在firing和moving上面添加一个IF语句,但在我看来,这似乎有点让事情复杂化了
关于暂停场景时如何显示“恢复”按钮,有什么建议吗?您无法与场景中的任何节点进行交互,因为您已完全暂停了该场景,这将暂停其所有子节点,这就是场景中的所有节点。要避免这种情况,请仅暂停某些
SKNode
s(层)
将某些节点添加到不同的SKNode
s,因此,您不能暂停整个场景,只能暂停要暂停的层(SKNode)(gameLayer)。它看起来像这样:
func pauseGame() {
gameLayer.isPaused = true
pauseLayer.isHidden = false
gameLayer.physicsWorld.speed = 0
gameLayer.speed = 0.0
}
func unpauseGame() {
gameLayer.isPaused = false
pauseLayer.isHidden = true
// Whatever else you need to undo
}
初始化节点
let gameLayer = SKNode()
let pauseLayer = SKNode()
gameLayer.addChild(gameSceneNode)
pauseLayer.addChild(resumeButton)
现在,如果要将子对象添加到场景中,请将其添加到希望其成为其一部分的层中:
将子节点添加到主层
let gameLayer = SKNode()
let pauseLayer = SKNode()
gameLayer.addChild(gameSceneNode)
pauseLayer.addChild(resumeButton)
不要忘记将层也添加到场景中
将层添加到场景中
addChild(gameLayer)
addChild(pauseLayer)
要暂停图层,请编写以下命令:
gameLayer.isPaused = true
请注意,在本例中,gameLayer
上的所有节点都将暂停,但pauseLayer
上的所有节点都不会暂停
您的完整示例可能如下所示:
func pauseGame() {
gameLayer.isPaused = true
pauseLayer.isHidden = false
gameLayer.physicsWorld.speed = 0
gameLayer.speed = 0.0
}
func unpauseGame() {
gameLayer.isPaused = false
pauseLayer.isHidden = true
// Whatever else you need to undo
}
您无法与场景中的任何节点进行交互,因为您已完全暂停该节点,这将暂停其所有子节点,这就是场景中的所有节点。要避免这种情况,请仅暂停某些
SKNode
s(层)
将某些节点添加到不同的SKNode
s,这样,您就可以只暂停希望暂停的层(SKNode)(gameLayer),而不是暂停整个场景。它看起来像这样:
func pauseGame() {
gameLayer.isPaused = true
pauseLayer.isHidden = false
gameLayer.physicsWorld.speed = 0
gameLayer.speed = 0.0
}
func unpauseGame() {
gameLayer.isPaused = false
pauseLayer.isHidden = true
// Whatever else you need to undo
}
初始化节点
let gameLayer = SKNode()
let pauseLayer = SKNode()
gameLayer.addChild(gameSceneNode)
pauseLayer.addChild(resumeButton)
现在,如果要将子对象添加到场景中,请将其添加到希望其成为其一部分的层中:
将子节点添加到主层
let gameLayer = SKNode()
let pauseLayer = SKNode()
gameLayer.addChild(gameSceneNode)
pauseLayer.addChild(resumeButton)
不要忘记将层也添加到场景中
将层添加到场景中
addChild(gameLayer)
addChild(pauseLayer)
要暂停图层,请编写以下命令:
gameLayer.isPaused = true
请注意,在本例中,gameLayer
上的所有节点都将暂停,但pauseLayer
上的所有节点都不会暂停
您的完整示例可能如下所示:
func pauseGame() {
gameLayer.isPaused = true
pauseLayer.isHidden = false
gameLayer.physicsWorld.speed = 0
gameLayer.speed = 0.0
}
func unpauseGame() {
gameLayer.isPaused = false
pauseLayer.isHidden = true
// Whatever else you need to undo
}
在下一场比赛中,我肯定会尝试一下尼克的建议。至于我上面的问题,它通过使用下面显示的代码工作。另外一个代码是关闭暂停按钮。现在,这项工作,我可以添加一个fadeIn和fadeOut行动的两个按钮
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
for touch: AnyObject in touches {
let pointOfTouch = touch.location(in: self)
let nodeUserTapped = atPoint(pointOfTouch)
if nodeUserTapped.name == "PauseButton" {
if (self.isPaused == false) {
pauseGame()
}
}
if nodeUserTapped.name == "ResumeButton" {
if (self.isPaused == true) {
resumeGame()
}
}
}
}
// MARK: - pauseGame
func pauseGame() {
self.isPaused = true
currentGameState = gameState.pauseGame
self.physicsWorld.speed = 0
self.speed = 0.0
if (backgroundMusicIsOn == true) {
backingAudio.stop()
}
if resumeButton.isHidden == true {
resumeButton.isHidden = false
}
if pauseButton.isHidden == false {
pauseButton.isHidden = true
}
}
// MARK: - resumeGame
func resumeGame() {
self.isPaused = false
currentGameState = gameState.inGame
self.physicsWorld.speed = 1
self.speed = 1.0
if (backgroundMusicIsOn == true) {
backingAudio.play()
}
if resumeButton.isHidden == false {
resumeButton.isHidden = true
}
if pauseButton.isHidden == true {
pauseButton.isHidden = false
}
}
override func touchesend(touch:Set,带有事件:UIEvent?){
用于触摸:触摸中的任何对象{
let pointOfTouch=触摸位置(in:self)
让nodeUserTapped=atPoint(触点)
如果nodeUserTapped.name==“PauseButton”{
如果(self.isPaused==false){
pauseGame()
}
}
如果nodeUserTapped.name==“ResumeButton”{
如果(self.isPaused==true){
恢复游戏()
}
}
}
}
//马克:波塞加姆
func pauseGame(){
self.isPaused=true
currentGameState=gameState.pauseGame
self.physicsWorld.speed=0
自身速度=0.0
如果(背景音乐==真){
backingAudio.stop()
}
如果resumeButton.ishiden==true{
resumeButton.ishiden=false
}
如果pauseButton.ishiden==false{
pauseButton.ishiden=true
}
}
//马克:继续比赛
func游戏(){
self.isPaused=false
currentGameState=gameState.inGame
self.physicsWorld.speed=1
自身速度=1.0
如果(背景音乐==真){
backingAudio.play()
}
如果resumeButton.ishiden==false{
resumeButton.ishiden=true
}
如果pauseButton.ishiden==true{
pauseButton.ishiden=false
}
}
对于我的下一场比赛,我肯定会尝试一下尼克的建议。至于我上面的问题,它通过使用下面显示的代码工作。另外一个代码是关闭暂停按钮。现在,这项工作,我可以添加一个fadeIn和fadeOut行动的两个按钮
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
for touch: AnyObject in touches {
let pointOfTouch = touch.location(in: self)
let nodeUserTapped = atPoint(pointOfTouch)
if nodeUserTapped.name == "PauseButton" {
if (self.isPaused == false) {
pauseGame()
}
}
if nodeUserTapped.name == "ResumeButton" {
if (self.isPaused == true) {
resumeGame()
}
}
}
}
// MARK: - pauseGame
func pauseGame() {
self.isPaused = true
currentGameState = gameState.pauseGame
self.physicsWorld.speed = 0
self.speed = 0.0
if (backgroundMusicIsOn == true) {
backingAudio.stop()
}
if resumeButton.isHidden == true {
resumeButton.isHidden = false
}
if pauseButton.isHidden == false {
pauseButton.isHidden = true
}
}
// MARK: - resumeGame
func resumeGame() {
self.isPaused = false
currentGameState = gameState.inGame
self.physicsWorld.speed = 1
self.speed = 1.0
if (backgroundMusicIsOn == true) {
backingAudio.play()
}
if resumeButton.isHidden == false {
resumeButton.isHidden = true
}
if pauseButton.isHidden == true {
pauseButton.isHidden = false
}
}
override func touchesend(touch:Set,带有事件:UIEvent?){
用于触摸:触摸中的任何对象{
let pointOfTouch=触摸位置(in:self)
让nodeUserTapped=atPoint(触点)
如果nodeUserTapped.name==“PauseButton”{
如果(self.isPaused==false){
pauseGame()
}
}
如果nodeUserTapped.name==“ResumeButton”{
如果(self.isPaused==true){
恢复游戏()
}
}
}
}
//马克:波塞加姆
func pauseGame(){
self.isPaused=true
currentGameState=gameState.pauseGame
self.physicsWorld.speed=0
自身速度=0.0
如果(背景音乐==真){
backingAudio.stop()
}
如果resumeButton.ishiden==true{
resumeButton.ishiden=false
}
如果pauseButton.ishiden==false{
pauseButton.ishiden=true
}
}
//马克:继续比赛
func游戏(){
self.isPaused=false
currentGameState=gameState.inGame
self.physicsWorld.speed=1
自己