以前,我通过在我的 SKScene 中创建初始化程序将属性传递到我的 SKScene,然后在我的 SceneEditViewController 中创建我的 SKScene 属性时设置这些初始化程序。这有意义吗?但愿如此。
但是,我现在使用的是场景编辑器,而不是手动创建 SKScene。我的动画场景有一个 SKLabelNode,我想将从不同的 viewController 接收到的文本传递到 SKScene 的 SKLabelNode。下面我在 if-else 的“if”部分提供了我以前的方法。在“其他”部分,我正在尝试新方法,但需要帮助。
当尝试从我的 SKScene 设置属性时,xcode 状态,“'SKScene' 类型的值没有成员'selectedTextSceneUse1'”
包括以下:
- 场景编辑视图控制器
- 扩展使我能够从另一个 viewController 接收文本字符串
- GameScene.swift(连接到我的 GameScene.sks 的 swift 文件)
我正在使用 swift 5.0,如果您需要更多信息,请告诉我。
import UIKit
import Foundation
import SpriteKit
import GameplayKit
class SceneEditViewController: UIViewController, UITabBarControllerDelegate {
var selectedSceneTextFinal: String?
if selectedSceneInt == 0 {
let animationScene3 = AnimationInventory18(size: CGSize(width:animationScreen.bounds.width, height:animationScreen.bounds.height), chosenChateracterSceneUse: chosenCharacterFinal, selectedTextSceneUse: selectedSceneTextFinal, chosenBackgroundSceneUse: chosenBackgroundFinal)
animationScene3.scaleMode = .aspectFit
animationScene3.backgroundColor = .black
animationScene3.anchorPoint = CGPoint(x: 0.5, y: 0.52)
animationScene3.position = CGPoint(x: 0, y: 0)
let transition = SKTransition.fade(withDuration: 1.0)
animationScreen.presentScene(animationScene3, transition: transition)
DispatchQueue.main.asyncAfter(deadline: .now() + 20){
self.animationScreen.presentScene(nil)
print("Scene Removed")
}
} else {
if let scene = SKScene(fileNamed: "GameScene") as GameScene {
scene.scaleMode = .aspectFit
scene.selectedTextSceneUse1 = selectedSceneTextFinal
animationScreen.presentScene(scene)
DispatchQueue.main.asyncAfter(deadline: .now() + 10){
self.animationScreen.presentScene(nil)
print("Scene Removed")
}
}
}
}
extension SceneEditViewController: textUpdateDelegate {
func didUpdateText(textFromView: String){
selectedSceneTextFinal = textFromView
}
}
import SpriteKit
import GameplayKit
class GameScene: SKScene {
var textNode: SKLabelNode?
// Not receiving the value passed from selectedSceneTextFinal
var selectedTextSceneUse1: String?
// MARK: Camera Node
let cameraNode = SKCameraNode()
// Initializer
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
func check() {
self.camera = cameraNode
cameraNode.position = CGPoint(x: 0, y: -300)
self.addChild(cameraNode)
print(selectedTextSceneUse1)
self.textNode?.text = selectedTextSceneUse1
}
override func sceneDidLoad() {
self.lastUpdateTime = 0
check()
}
}