从GameViewController到GameScene的访问按钮,标签和uiimageviews
问题描述:
在我的GameViewController中,我有按钮标签和一切设置。在viewDidLoad()下,我将标签和所有内容设置为.hidden = true
,我的gameOver内容位于我的GameScene文件中,我无法将按钮标签设置为.hidden = true
。该按钮被称为backToMenu,如果我在GameViewController中的任意位置键入它,它会识别它,但是当我尝试在GameScene中输入backToMenu.hidden = false
时,它会给我一个错误。有什么方法可以让我的他们在GameScene中也可以访问?从GameViewController到GameScene的访问按钮,标签和uiimageviews
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)
}
答
这是因为变量在不同的班级。这样做的一种方式,将mabye是声明变量类变量,这样
class var myVariable = // whatever
,如果你想清理你的代码,你也可以有静态干将,这样
static func getMyVariable() -> MyVariableType
{
return myVariable
}
通过这种方式,变量将是来自世界各地的访问,并访问他们,你型
GameViewController.getMyVariable()
或
GameViewController.myVariable
答
您需要设置一种方法来访问GameScene中的GameViewController方法。这可以通过创建对GameViewController的引用来完成。为此,我建议看看这篇文章:Segue in SKScene to UIViewController