SpriteKit Swift 2.0 游戏:跨多个场景的按钮和节点

Posted

技术标签:

【中文标题】SpriteKit Swift 2.0 游戏:跨多个场景的按钮和节点【英文标题】:SpriteKit Swift 2.0 Game: Buttons & Nodes across multiple Scenes 【发布时间】:2016-03-19 19:01:00 【问题描述】:

我正在使用 Xcode 7.2.1,并且是 Swift 的新手。

我有一个场景,顶部有一个按钮,可以播放和暂停音乐。 如何使此按钮在多个场景中可用?我希望这个按钮出现在我的所有场景中(菜单、关卡选择、游戏...)

游戏视图控制器代码:

let filePath = NSBundle.mainBundle().pathForResource("gametrack1", ofType: "mp3")        
if let filePath = filePath 
    let fileURL = NSURL(fileURLWithPath: filePath)
        do
            try AudioPlayer = AVAudioPlayer(contentsOfURL: fileURL)
            AudioPlayer.play()
        catch
         print("error") 
    

和持有暂停/播放按钮的场景,以及按下它时的操作是:

import Foundation
import SpriteKit
import AVFoundation

class PlayPauseOverlay: SKScene     

var buttonPlayPause = SKSpriteNode()    

override func didMoveToView(view: SKView) 

    if musicPlaying == true
     buttonPlayPause = SKSpriteNode(imageNamed: "buttonPause")  else
     buttonPlayPause = SKSpriteNode(imageNamed: "buttonPlay") 
    buttonPlayPause.size = CGSizeMake(50, 50)
    buttonPlayPause.position = CGPoint(x: self.frame.width/2, y: self.frame.height - 50)
    self.addChild(buttonPlayPause)




override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) 
    for touch: AnyObject in touches 

        let location = touch.locationInNode(self)

        if buttonPlayPause.containsPoint(location) 

            if musicPlaying == true
                //we want to pause and show a play button
                musicPlaying = false
                buttonPlayPause.texture = SKTexture(imageNamed: "buttonPlay")
                print("pause")
                AudioPlayer.pause()
            else
                musicPlaying = true
                buttonPlayPause.texture = SKTexture(imageNamed: "buttonPause")
                print("play")
                AudioPlayer.play()
            
        else ... 
    


override func update(currentTime: CFTimeInterval) 
    /* Called before each frame is rendered */


我如何获取此场景中的所有信息(一个工作按钮)并使其可用于其他场景而无需复制粘贴?我如何基本重叠两个场景?提前致谢。

【问题讨论】:

【参考方案1】:

最简单的实现方法是在视图控制器中制作按钮,无论是通过编程方式还是在界面构建器中。因为所有场景都在同一个视图控制器中运行。所以只需从界面构建器中拖动一个按钮,给它一些漂亮的布局,然后在你的 viewcontroller 类中连接一个函数。

然后在该函数中,运行代码以暂停/播放音频。

【讨论】:

如何以编程方式执行此操作?我得到了无穷无尽的错误。 GameViewController 不喜欢 SKSpriteNodes(需要 UIView?),没有成员“框架”,不能使用 self.addchild(),touchesbegan 函数有错误.. 那是因为 SkSpriteNode 是一个 SkScene 对象,要使常规按钮使用 UIButton。最简单的方法是转到您的故事板,然后将一个按钮拖到您的视图控制器中。如果您以前没有这样做过,只需寻找制作简单的一键式应用程序的教程。或者,如果您想以编程方式执行此操作(如果您不必这样做,我不应该这样做),我可以给您一个代码示例。

以上是关于SpriteKit Swift 2.0 游戏:跨多个场景的按钮和节点的主要内容,如果未能解决你的问题,请参考以下文章

SpriteKit 动画意外停止

Swift,SpriteKit:释放游戏场景并重新分配新场景

暂停和重置游戏 Spritekit / Swift 之间的区别?

基本的 swift/spritekit 游戏 - 麻烦重绘

使用 spritekit swift 在 swift 中为游戏创建主菜单

是否可以仅针对 iphone 5 和 6 发布使用 spritekit 和 swift 开发的游戏