如何访问 SpriteKit 场景编辑器参考节点上自定义类中包含的 Swift 中的变量?

Posted

技术标签:

【中文标题】如何访问 SpriteKit 场景编辑器参考节点上自定义类中包含的 Swift 中的变量?【英文标题】:How do I access variables in Swift contained in a custom class on a SpriteKit Scene Editor Reference node? 【发布时间】:2019-07-16 13:49:09 【问题描述】:

首先我想说我是完全自学的,我在互联网上找到了尽可能多的教程,所以如果有某些我不太熟悉的概念,请提前道歉。

好吧,我想就困扰我好几天的事情寻求帮助。

我在 SpriteKit 场景(GameScene)中有一个参考节点(referenceNode), 该引用节点引用了另一个 SpriteKit 场景(referenceScene), 这个场景有一个自定义类(referenceClass.swift)。

我在 referenceClass.swift 中有一个名为 trueOrFalse 的布尔变量,我希望能够从我在 gameScene.swift 中的代码更改值。

我已经尝试通过创建实例来从 SceneEditor 转换为我的代码,就像你会做 SKSpriteNode 和 SKLableNodes 一样,但这似乎不起作用

class GameScene: SKScene


var referenceNode: SKReferenceNode!  //link to SceneEditor Reference Node

override func didMove(to view: SKView)

    referenceNode = self.childNode(withName: "referenceNode") as! SKReferenceNode



override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?)

    referenceNode.trueOrFalse = false


这是我的自定义类

import UIKit
import SpriteKit
class referenceClass: SKScene

    var trueorfalse:Bool = true
    func oneFunction()
    

    

这只是我制作的一个小示例项目,因此我可以通过尝试可以找到的不同解决方案来了解这个概念,但没有成功。 我意识到我可以创建全局变量,但我试图保持我的代码干净,因为与此节点相关的所有功能都保留在此参考类中。我也被告知它的编程不好?

任何帮助将不胜感激:)

巴尼

【问题讨论】:

你需要将它转换为referenceClass,而不是SKReferenceNode 嗨 KnightOfDragon,谢谢你,谢谢你,谢谢你 - 它非常适合我想要做的事情。我花了几天时间浏览教程和其他快速书籍,但我找不到答案。 【参考方案1】:

首先我会检查搜索是否正确 - https://developer.apple.com/documentation/spritekit/sknode/searching_the_node_tree

例如,在模板 SpriteKit 项目节点中搜索带有 // 前缀,即在您的情况下为 //referenceNode

其次,不要立即将其强制转换为SKReferenceNode,首先检查返回的对象类型(如果有)。

【讨论】:

仅在您不能保证您的节点所在的树中的分支时才使用 //。 // 是一个搜索函数,需要一些时间来执行 嗨,Maxim,SkSpritenodes 等的搜索工作正常,结果我将参考节点转换为错误的类型,这就是为什么我不能在类中使用变量的原因。但是谢谢你的洞察力:)

以上是关于如何访问 SpriteKit 场景编辑器参考节点上自定义类中包含的 Swift 中的变量?的主要内容,如果未能解决你的问题,请参考以下文章

使用 SpriteKit 场景编辑器设计复杂对象

SpriteKit 关卡编辑器纹理图集

如何在另一个视图控制器中访问 SpriteKit 场景的变量?

如果使用编辑器中的场景加载,如何在 SpriteKit 中检测触摸

如何在 SpriteKit 中模糊场景?

在 SpriteKit 中添加到父级时未显示未归档节点