Итак, я пишу программу быстро, и у меня возникли проблемы с пониманием правильного взаимодействия между GameScene и GameViewController:
В основном у меня есть 'savefiles', которые являются плистами, при загрузке с использованием функции "self.loadFromPlist ( fileName:) "загружаются путем очистки предыдущего массива узлов и отрисовки набора SKShapeNodes на основе атрибутов из элементов словаря загруженного файла Plist
Мне нужен файловый браузер, который я реализовал из Cocoapod (FileBrowser), который должен вызываться в «GameViewController»
Моя проблема такова:
При вызове моей функции 'loadFromPlist' изнутри 'viewDidLoad', как это (для инициализации проекта ) - функция работает, и игровая сцена отрисовывается:
override func viewDidLoad() {
super.viewDidLoad()
if let view = self.view as! SKView? {
// Load the SKScene from 'GameScene.sks'
if let scene = SKScene(fileNamed: "GameScene") {
// Set the scale mode to scale to fit the window
scene.scaleMode = .aspectFill
// Present the scene
view.presentScene(scene)
let gameScene = scene as! GameScene
gameScene.loadFromPlist(scoreFileName: gameScene.defaultScore)
gameScene.gameViewControllerDelegate = self
}
view.ignoresSiblingOrder = true
view.showsFPS = true
view.showsNodeCount = true
}
}
Когда я пытаюсь сделать то же самое в своей собственной функции в GameViewController (называемой view a GameviewDelete в GamScene), код выполняет строку, и я можете следовать за ним с помощью отладчика в функцию loadFromPlist в ga mescene, он выполняет for l oop рисование фигур et c, но просто ничего не делает.
func callloadplist() {
var loadedfilename2:String!
let file = FileBrowser()
present(file, animated: true, completion: nil)
if let scene = GameScene(size: view.frame.size) as? GameScene {
var strippedfilename: String?
file.didSelectFile = { (file: FBFile) -> Void in
let loadedfilename = file.displayName
scene.filebrowserselectedfilename = loadedfilename
if let view = self.view as! SKView? {
// Load the SKScene from 'GameScene.sks'
if let myskscene = SKScene(fileNamed: "GameScene") {
// Set the scale mode to scale to fit the window
let gameScene = myskscene as! GameScene
let strippedfilename = String(loadedfilename.dropLast(6))
print(strippedfilename)
gameScene.loadFromPlist(scoreFileName: "output")
}
}
}
}
}
Таким образом, вызов функции работает внутри viewDidLoad (), а также как self. loadFromPlist (fileName:) 'в GameScene.swift, но не может быть вызван из пользовательского метода / функции, созданного мной в GameViewControllers - Любая информация?
Спасибо