我正在製作遊戲。遊戲的代碼幾乎完全在PlayScene.swift文件中。但是,由於我需要識別平移手勢,因此必須將UIPanGestureRecognizer添加到我的ViewController.swift中。當玩家拖動屏幕時,我想旋轉在PlayScene.swift中聲明和使用的SpriteNode。這個spriteNode的名稱是Tommy,但是當我從ViewController(這是我在PlayScene.swift中的一個自定義函數)中執行PlayScene().rotateTommyLeft()
時,函數rotateTommyLeft被調用,但它不會旋轉當前正在運行的同一個sprite 。它創建一個類PlayScene的新實例,創建新的SpriteNode tommy,然後旋轉那個。swift:從控制器訪問正在使用的場景變量
如何從當前正在運行的PlaySceen訪問SpriteNode tommy?
編輯:我發佈代碼的部分,所以我們可以解決存儲場景並在其他類之間傳輸的問題。
在我的GameScene類的頂部,我聲明瞭變量storedPlayScene來存儲遊戲發生的場景。
var storedPlayScene = PlayScene()
然後,我創建了現場,目前它當按下播放按鈕(也GameScene類)
var scene = PlayScene(size: self.size)
let skView = self.view as SKView
skView.ignoresSiblingOrder = true
scene.scaleMode = .ResizeFill
scene.size = skView.bounds.size
scene.backgroundColor = UIColor(red: 106/255.0, green: 180/255.0, blue: 1.0, alpha: 1.0)
storedPlayScene = scene
skView.presentScene(scene)
現在令人吃驚的一部分出現,當我試圖獲得兩個變量屬於PlayScene類,來自ViewController類。
當我寫這篇文章的視圖控制器類
var rotation = GameScene().getStoredPlayScene().tommy.zRotation
我獲得正確的zRotation。 但是,當我在相同的ViewController類var position = GameScene().getStoredPlayScene().getPos()
中編寫該數據時,數據不正確。它表示位置是(0,0)。
我有問題搞清楚爲什麼位置不正確,而zRotation是好的。
何時/在哪裏創建正在使用的PlayScene實例?您需要存儲對該實例的引用,並使用該引用來調用'playScene.rotateTommyLeft()'。 – 2014-08-28 14:59:41
謝謝。我找到了代碼。它正在被稱爲GameScene的前一場景中創建。我究竟如何存儲它,以便我可以從控制器訪問它?我試圖將它存儲在NSUserDefaults中,但我無法檢索它。有沒有其他的變量,你推薦存儲它? – Sam 2014-08-28 16:26:14
_不要使用NSUserDefaults,這不是它的目的。沒有看到你的代碼和/或知道你的項目是如何佈置的,很難準確地說出你應該做什麼。但是,一般來說,這聽起來像'PlayScene'應該是一個[屬性](https://developer.apple.com/library/prerelease/mac/documentation/Swift/Conceptual/Swift_Programming_Language/Properties.html#//apple_ref/ 'GameScene'上的doc/uid/TP40014097-CH14-XID_368),它應該是視圖控制器上的一個屬性。然後你可以通過'self.gameScene.playScene'這樣的東西從你的視圖控制器訪問'PlayScene'。 – 2014-08-28 19:48:39