访问 SCNSphere 属性
Posted
技术标签:
【中文标题】访问 SCNSphere 属性【英文标题】:Accessing SCNSphere Properties 【发布时间】:2017-03-16 04:36:51 【问题描述】:我正在尝试访问/修改 SCNSphere
在 SCNScene
中的属性。我将场景预设为一个名为“spaceScene.scn”的文件。我正在加载场景
self.sceneView.scene = [SCNScene sceneNamed:@"spaceScene.scn"];
self.sceneView.allowsCameraControl = YES;
self.sceneView.scene.rootNode.camera = [SCNCamera camera];
SCNSphere *earth = (SCNSphere *)[self.sceneView.scene.rootNode childNodeWithName:@"earth" recursively:NO];
NSMutableArray *materials = earth.materials;
NSLog(@"Materials of earth from scene: %@", materials);
我似乎无法阅读SCNSphere
earth 的materials 属性。我不断收到实例错误:
-[SCNNode materials]: unrecognized selector sent to instance 0x1701c5550
觉得这个问题有点傻,但请有人告诉我如何访问球体属性?谢谢
【问题讨论】:
【参考方案1】:SCNSphere
不继承自SCNNode
。您应该检索节点的geometry
,它可以是一个球体。
【讨论】:
【参考方案2】:当您创建 earth
对象时,您将 SCNNode
转换为 SCNSphere
。
如果您查看文档,您正在使用的函数返回SCNNode
。
- (SCNNode *)childNodeWithName:(NSString *)name
recursively:(BOOL)recursively;
通过强制转换,您可以假装对象是SCNSphere
,但事实并非如此。当您向对象发送materials
消息时,它会崩溃,因为它是SCNNode
上的一个无法识别的选择器。
我建议不要强制转换,并寻找其他方法来检索您的对象。
【讨论】:
不幸的是,我在发布此消息后就明白了。显然它知道它不是一个球体,因为它告诉我 SCNNode 材料是问题所在。不知道如何检索对象。最终,我试图将 SKScene 设置为表面,这样我就可以在球体表面上添加对象并与之交互以上是关于访问 SCNSphere 属性的主要内容,如果未能解决你的问题,请参考以下文章
为啥自定义 SCNGeometry 中的黑色比 SCNSphere 中的浅
是否可以用鲜红色的 SCNSpotlight 画出清晰的 SCNSphere?
在 SCNSphere 上获取点击位置 - Swift (SceneKit) / iOS
Android Gradle 插件Gradle 扩展属性 ④ ( 扩展属性访问方式 | 直接访问扩展属性 | 通过 ext 对象访问 | 在 gradle.properties 中定义扩展属性 )