从 GameViewController 访问按钮、标签和 uiimageviews 到 GameScene
Posted
技术标签:
【中文标题】从 GameViewController 访问按钮、标签和 uiimageviews 到 GameScene【英文标题】:Access buttons,labels and uiimageviews from GameViewController to GameScene 【发布时间】:2015-08-27 14:02:01 【问题描述】:在我的 GameViewController 中,我有按钮标签和所有设置。在 viewDidLoad() 下,我已将标签和所有内容设置为 .hidden = true
,而我的 gameOver 内容位于我的 GameScene 文件中,我无法将按钮标签设置为 .hidden = true
。该按钮称为 backToMenu,如果我在 GameViewController 中的任何位置键入它,它会识别它,但是当我尝试在 GameScene 中键入 backToMenu.hidden = false
时,它会给我一个错误。有什么方法可以让我在 GameScene 中访问它们?
游戏场景代码:
func gameOver()
bigBox.hidden = false
backToMenu.hidden = false
scoreLabel.hidden = false
var alrentSound = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("MenuSelect", ofType: "mp3")!)
AVAudiosession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, error: nil)
AVAudioSession.sharedInstance().setActive(true, error: nil)
var error: NSError?
screenTapped = AVAudioPlayer(contentsOfURL: alrentSound, error: &error)
screenTapped.prepareToPlay()
screenTapped.stop()
square1.removeFromParent()
wallGen.stopWalls()
//diamondGen.stopDiamonds()
movingGround.stop()
square1.stop()
//square2.stop()
// save current points label value
let pointsLabel = childNodeWithName("pointsLabel") as! PPPointsLabel
let highscoreLabel = childNodeWithName("highscoreLabel") as! PPPointsLabel
if highscoreLabel.number < pointsLabel.number
highscoreLabel.setTo(pointsLabel.number)
let defaults = NSUserDefaults.standardUserDefaults()
defaults.setInteger(highscoreLabel.number, forKey: "highscore")
GameVieController 代码:
@IBOutlet weak var bigBox: UIImageView!
@IBOutlet weak var backToMenu: UIButton!
@IBOutlet weak var scoreLabel: UILabel!
@IBAction func backToMenuButton(sender: AnyObject)
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyboard.instantiateViewControllerWithIdentifier("MainMenuViewController") as! UIViewController
self.dismissViewControllerAnimated(true, completion: nil)
var alrentSound = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("MenuSelect", ofType: "mp3")!)
AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, error: nil)
AVAudioSession.sharedInstance().setActive(true, error: nil)
var error: NSError?
screenTapped = AVAudioPlayer(contentsOfURL: alrentSound, error: &error)
screenTapped.prepareToPlay()
screenTapped.play()
override func viewDidLoad()
super.viewDidLoad()
bigBox.hidden = true
backToMenu.hidden = true
scoreLabel.hidden = true
// Configure the view
let skView = view as! SKView
// store a ref
// gameScene.gameDelegate = self
// Create and configure the scene
gameScene = GameScene(size: skView.bounds.size)
gameScene?.scaleMode = .AspectFill
// Present the scene
skView.presentScene(gameScene)
【问题讨论】:
【参考方案1】:这是因为变量在不同的类中。做到这一点的一种方法,可能是声明变量类变量,像这样
class var myVariable = // whatever
如果你想清理你的代码,你也可以有静态 getter,像这样
static func getMyVariable() -> MyVariableType
return myVariable
这样变量就可以从任何地方访问,并且要访问它们你输入
GameViewController.getMyVariable()
或
GameViewController.myVariable
【讨论】:
【参考方案2】:您需要设置一种方法来访问 GameScene 中的 GameViewController 方法。这可以通过创建对 GameViewController 的引用来完成。为此,我建议您查看这篇文章:Segue in SKScene to UIViewController
【讨论】:
以上是关于从 GameViewController 访问按钮、标签和 uiimageviews 到 GameScene的主要内容,如果未能解决你的问题,请参考以下文章
Swift,SpriteKit,GameViewController 和 MainViewController 在 GameOver 之后的 Segue
从 UIViewController 呈现 SKScene - Swift
将 GameViewController.swift 链接到 GameScene.swift
我收到错误消息,“从不兼容的类型“gameViewController”分配给“id avaudioplayerdelegate””[关闭]