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 游戏:跨多个场景的按钮和节点的主要内容,如果未能解决你的问题,请参考以下文章
Swift,SpriteKit:释放游戏场景并重新分配新场景
暂停和重置游戏 Spritekit / Swift 之间的区别?