SpriteKit Swift 2.0 游戏:跨多个场景的按钮和节点
SpriteKit Swift 2.0 Game: Buttons & Nodes across multiple Scenes
我正在使用 Xcode 7.2.1 并且是 Swift 的新手。
我有一个场景,顶部有一个按钮可以播放和暂停音乐。
如何使此按钮在多个场景中可用?我希望这个按钮出现在我的所有场景中(菜单、关卡 select、游戏...)
游戏视图控制器代码:
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") }
}
和按住 Pause/Play 按钮的场景,以及按下按钮时要执行的操作是:
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 */
}
}
如何在不复制粘贴的情况下获取此场景(一个工作按钮)中的所有信息并使其可用于其他场景?我如何基本上重叠两个场景?提前致谢。
最简单的实现方法是以编程方式或在界面生成器中在视图控制器中创建按钮。因为所有场景 运行 在同一个视图控制器中。因此,只需从界面生成器中拖出一个按钮,给它一些漂亮的布局,然后在 viewcontroller class 中将一个函数连接到它。
然后在该函数内,运行 到 pause/play 音频的代码。
我正在使用 Xcode 7.2.1 并且是 Swift 的新手。
我有一个场景,顶部有一个按钮可以播放和暂停音乐。 如何使此按钮在多个场景中可用?我希望这个按钮出现在我的所有场景中(菜单、关卡 select、游戏...)
游戏视图控制器代码:
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") }
}
和按住 Pause/Play 按钮的场景,以及按下按钮时要执行的操作是:
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 */
}
}
如何在不复制粘贴的情况下获取此场景(一个工作按钮)中的所有信息并使其可用于其他场景?我如何基本上重叠两个场景?提前致谢。
最简单的实现方法是以编程方式或在界面生成器中在视图控制器中创建按钮。因为所有场景 运行 在同一个视图控制器中。因此,只需从界面生成器中拖出一个按钮,给它一些漂亮的布局,然后在 viewcontroller class 中将一个函数连接到它。
然后在该函数内,运行 到 pause/play 音频的代码。