2016-04-01 9 views
0

私はSwiftを初めて使っています。これは明らかな質問のように思えます。GameScene.swiftのGameViewController.swiftからオブジェクトのプロパティを変更する

私はSwiftにゲームを書きたいと思っています。私はストーリーボードにラベルと再生ボタンをデザインしました。

Main.storyboard

ここに見られるように、私はGameViewController.swiftファイルでこれらのオブジェクトへの参照を追加しました:

// MARK: Objects 
@IBOutlet var gameLabel: UILabel! 
@IBOutlet var playButton: UIImageView! 

// MARK: Actions 

@IBAction func playButtonTapped(sender: UITapGestureRecognizer) { 
     GameScene().gameStart() 
} 

これはGameViewControllerクラスに属する:class GameViewController: UIViewController

しかし、メインゲーム自体はGameScene.swiftで行われます。これは、ゲームが始まるとすぐにレーベルと画像を隠さなければならないということです。

GameViewController().playButton.hidden = true 

...ゲームは致命的なエラーでクラッシュ:私はGameScene.swiftに次のように行った場合以来、非表示にするには、これらのオブジェクトのプロパティを設定する方法がわかりませんよ。エラー:致命的なエラー:オプション値をアンラップしている間に予期せずnilが見つかりました。

誰でもこの問題の提案がありますか?どんな助けでも大歓迎です。情報がわかりにくいのであれば、申し訳ありません。

乾杯。

+0

GameSceneクラスを管理するGameViewControllerへの参照を保持するために、GameSceneクラスにプロパティを追加できます。次に、gameVC.gameLabel.hidden = trueを実行します。かなり良い解決策が必要な場合は、プロトコルを追加して、gameDidStart()とson onのメソッドを宣言し、GameSceneデリゲートをGameViewControllerにすることができます。それが助けてくれることを願っています。 – glm4

+0

彼はSwiftに新しいと言いました。 – Confused

答えて

1

'GameViewController(), but you want you want use your already existent one. If you only want to create one GameViewController`の新しいインスタンスを作成していますが、これはおそらくケースですが、静的インスタンス変数を使用できます。

GameViewControllerで、置く:あなたのGameSceneで最後に

GameViewController.instance = self 

を、GameViewController.instanceGameViewController()を切り替える:

static var instance: GameViewController! 

を、それはviewDidLoad()を年代に、置きます。

+0

私はこれをしましたが、私のコードの別のセクションでクラッシュを経験しています。私の関数の1つでは、 'randomX = Int(arc4random_uniform(UInt32(CGRectGetWidth(self.frame)-700))+ 351)'になるとコードがクラッシュします。私は 'CGRectGetWidth(self.frame)'が1024.0の代わりに1.0を与えることを発見しました。私はこれが私の非常に騒々しい音だと知っていますが、なぜこれが分かっていますか?実行される関数は次のとおりです。[link](http://pastebin.com/VaiJ3T2E)。何か案は? –

+0

@KaiSilverthorne 'self.frame'はViewControllerで使われるべきですが、あなたはシーンでそれを使っています。 'GVC.frame.width'か' self.size.width'を試してください。 – BradzTech

+0

私がやったことは、GameSceneの "static var"もやって、GameSceneからフレームサイズを得て、それを変数として保存しました。私はこれらのサイズを引数として関数に渡しました。ご助力ありがとうございます! –

関連する問題