【问题标题】:How to use properties from SCNFloor with Swift and Scenekit?如何将 SCNFloor 的属性与 Swift 和 Scenekit 一起使用?
【发布时间】:2014-08-13 22:38:07
【问题描述】:

我不知道如何使用 Swift 从 Scenekit SCNFloor 类中访问属性,在 Objective-c 中,他们这样做是这样的:

SCNNode*floor = [SCNNode node];
floor.geometry = [SCNFloor floor];
((SCNFloor*)floor.geometry).reflectionFalloffEnd = 10;

这创建了地板,我如何访问“reflectionFalloffEnd”?

let levelFloor = SCNNode()
levelFloor.geometry = SCNFloor()

谢谢

编辑感谢它现在工作的快速响应:)

【问题讨论】:

    标签: swift scenekit


    【解决方案1】:

    无论您使用的是 ObjC 还是 Swift,为了让编译器对您在引用上使用 SCNFloor 属性或方法感到满意,该引用需要具有 SCNFloor 类型。

    你可以通过演员来做到这一点:

    // ObjC
    ((SCNFloor*)floor.geometry).reflectionFalloffEnd = 10;
    
    // Swift
    (levelFloor.geometry as SCNFloor).reflectionFalloffEnd = 10
    

    但这可能会变得相当笨拙,尤其是当您要在几何体上设置一堆属性时。我更喜欢只使用局部变量(或常量,因为不需要更改引用):

    let floor = SCNFloor()
    floor.reflectionFalloffEnd = 10
    floor.reflectivity = 0.5
    let floorNode = SCNNode(geometry: floor)
    floorNode.position = SCNVector3(x: 0, y: -10.0, z: 0)
    scene.rootNode.addChildNode(floorNode)
    

    【讨论】:

      【解决方案2】:

      (levelFloor.geometry as SCNFloor).reflectionFalloffEnd = 10 是您在 Swift 中制作该演员的方式 - 您快到了!

      作为替代方案 - 如果您需要经常访问此属性,您可能最终会在代码中使用一堆 as 类型转换 :) 您可能更愿意简单地声明常量来保存这些对象:

      let levelFloor = SCNNode()
      let levelFloorGeometry = SCNFloor()
      levelFloor.geometry = levelFloorGeometry
      
      levelFloorGeometry.reflectionFalloffEnd = 10
      // and so on as this property of your SCNNode's geometry needs to change throughout your app
      

      【讨论】:

        猜你喜欢
        • 2016-12-13
        • 1970-01-01
        • 2023-03-31
        • 2019-03-10
        • 2014-10-30
        • 2021-10-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多