首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >子类SCNScene和SceneKit编辑器

子类SCNScene和SceneKit编辑器
EN

Stack Overflow用户
提问于 2015-11-23 22:11:31
回答 3查看 762关注 0票数 0

我有一个带有相机设置的SCNScene子类,我想在所有子类中使用这些子类。

代码语言:javascript
复制
let scene01 = TheSubclassScene()
let scene02 = TheSubclassScene(named:"art.scnassets/testScene.scn")!
self.sceneArray.addObject(scene01)
self.sceneArray.addObject(scene02)

我想在运行时改变场景。当我用代码创建场景时,这是可行的,而不是使用SceneKit编辑器中的场景。在调试器中,我可以看到数组中的两个场景。一个是SCNSceneSubclass类型,另一个是SCNScene类型。

有什么办法让这件事奏效吗?

更新:这是我的场景子类

代码语言:javascript
复制
class TheSubclassScene: SCNScene
{
    let cameraNode = CameraNode()

    override init()
    {
        super.init()
        self.rootNode.addChildNode(self.cameraNode)
    }

    required init?(coder aDecoder: NSCoder)
    {
        super.init(coder: aDecoder)
    }
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-11-24 00:38:27

我有办法解决这个问题。不太好但很管用。我实例化一个SCNScene(named: "art.scnassets/testScene.scn"),然后实例化一个TheSubclassScene(),然后克隆场景的rootNode,并将其作为子节点添加到子类场景中。

代码语言:javascript
复制
let testScene = SCNScene(named:"art.scnassets/testScene.scn")!
let subclassScene = TheSubclassScene()
subclassScene.rootNode.addChildNode(testScene.rootNode.clone())
票数 1
EN

Stack Overflow用户

发布于 2015-11-24 13:00:40

.scn文件只是使用NSKeyedArchiver存档并写入磁盘的SCNScene实例。+ sceneNamed:所做的就是简单地用一个NSKeyedUnarchiver解压缩场景。

然后,您可以尝试使用- setClass:forClassName:来实例化一个子类,而不是一个SCNScene

尽管如此,SCNScene并不是真正的子类。相反,您可以在视图控制器或游戏控制器(可能是NSObject的直接子类)中实现您的逻辑。这个控制器也可能遵循SCNSceneRendererDelegate来实现游戏逻辑。

票数 1
EN

Stack Overflow用户

发布于 2015-11-23 23:45:21

注意:不要给自定义子类以“SCN”开头的名称;该前缀是Apple的前缀。

我看到的唯一不同之处是调用SCNSceneSubclass(named:) vs SCNSceneSubclass()。在没有看到您的代码的情况下,我的预感是您的SCNSceneSubclass(named:)实现没有调用子类的初始化,因此错过了一些关键步骤。

我们能看一下你子类的源代码吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33881677

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档