2016-04-01 12 views
0

Swift için çok yeni, bu açık bir soru gibi görünüyorsa üzgünüm.GameScene.swift içinde bir nesnenin bir özelliğini değiştirme GameScene.swift

Swift'de bir oyun yazmaya çalışıyorum ve hikaye tahtasında bir etiket ve bir oynatma düğmesi tasarladım. Burada görüldüğü gibi

Main.storyboard

Ben GameViewController.swift dosyasında bu nesnelere başvurular ekledik: Bu GameViewController sınıfa aittir

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

// MARK: Actions 

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

: class GameViewController: UIViewController. Ancak, ana oyunun kendisi GameScene.swift'da gerçekleşir. Bu, oyun başladığında etiket ve görüntüyü gizlemek zorunda kalmamı gerektiriyor. Ben GameScene.swift aşağıdaki yaptıysam beri, bu nesnelerin gizlemek için özellikleri ayarlamak için nasıl emin değilim: ölümcül hata ile

GameViewController().playButton.hidden = true 

... oyun çöküyor. Hata diyor: ölümcül hata: İsteğe bağlı bir değer çıkarılırken beklenmedik şekilde sıfır bulundu.

Bu sorun hakkında bir öneri olan var mı? Herhangi bir yardım çok takdir edilmektedir. Bilgilerin anlaşılması zorsa üzgünüm.

Şerefe.

+0

GameScene sınıfını yönetmek için GameScene sınıfına bir özellik ekleyebilirsiniz. Ve sonra gameVC.gameLabel.hidden = true yapın. Oldukça iyi bir çözüm istiyorsanız, bir protokol ekleyebilir ve gameDidStart() ile oğlu için bir yöntem ekleyebilir ve GameScene temsilcisinin GameViewController olmasını sağlayabilirsiniz. Umarım Swift'e yeni geldiğini söyleyen kısımda – glm4

+0

'a yardım ettiniz mi? – Confused

cevap

1

'GameViewController() , but you want you want use your already existent one. If you only want to create one GameViewController` örneğinin yeni bir örneğini oluşturuyorsunuz. Bu, büyük olasılıkla bir statik örnek değişkeni kullanabiliyor.

GameViewController yılında koyun:, senin GameScene yılında Nihayet

GameViewController.instance = self 

, GameViewController.instance ile GameViewController() geçiş:

static var instance: GameViewController! 

o viewDidLoad() var ise, koydu.

+0

Bunu yaptım, ama şimdi kodumun başka bir bölümünde çökmeler yaşıyorum. İşlevlerimden birinde, 'randomX = Int (arc4random_uniform (UInt32 (CGRectGetWidth (self.frame) -700)) + 351)' 'e ulaştığımda kodum çöküyor. 'CGRectGetWidth (self.frame) 'ın 1024.0 yerine 1.0 verdiğini öğrendim. Bunun kulağa çok saçma geldiğini biliyorum, ama bunun neden olduğunu biliyor musun? İşte koşulan fonksiyonlar: [link] (http://pastebin.com/VaiJ3T2E). Herhangi bir fikir? –

+0

@KaiSilverthorne “self.frame” işlevini ViewController uygulamasında kullanmalısınız, ancak sahnede kullanıyorsunuz. "GVC.frame.width" veya "self.size.width" öğelerini deneyin. – BradzTech

+0

Yaptıklarım da GameScene için "statik var" yapmaktı ve çerçeve boyutunu GameScene'den aldılar ve bir değişken olarak kaydettiler. Daha sonra bu boyutları argüman olarak işlevlerine geçirdim. Yardımın için çok teşekkürler! –

İlgili konular