【问题标题】:Accessing SCNSphere Properties访问 SCNSphere 属性
【发布时间】:2017-03-16 04:36:51
【问题描述】:

我正在尝试访问/修改 SCNSphereSCNScene 中的属性。我将场景预设为一个名为“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 earthma​​terials 属性。我不断收到实例错误:

-[SCNNode materials]: unrecognized selector sent to instance 0x1701c5550

觉得这个问题有点傻,但请有人告诉我如何访问球体属性?谢谢

【问题讨论】:

    标签: ios objective-c scenekit scnnode scnsphere


    【解决方案1】:

    SCNSphere继承自SCNNode。您应该检索节点的geometry,它可以是一个球体。

    【讨论】:

      【解决方案2】:

      当您创建 earth 对象时,您将 SCNNode 转换为 SCNSphere

      如果您查看文档,您正在使用的函数返回SCNNode

      - (SCNNode *)childNodeWithName:(NSString *)name 
                         recursively:(BOOL)recursively;
      

      通过强制转换,您可以假装对象是SCNSphere,但事实并非如此。当您向对象发送materials 消息时,它会崩溃,因为它是SCNNode 上的一个无法识别的选择器。

      我建议不要强制转换,并寻找其他方法来检索您的对象。

      【讨论】:

      • 不幸的是,我在发布此消息后就明白了。显然它知道它不是一个球体,因为它告诉我 SCNNode 材料是问题所在。不知道如何检索对象。最终,我试图将 SKScene 设置为表面,这样我就可以在球体表面上添加对象并与之交互
      猜你喜欢
      • 2015-11-03
      • 2013-12-23
      • 2013-07-11
      • 2011-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多