如何使用SCNFloor中的属性与Swift和Scenekit?

NC_*_*DEV 4 scenekit swift

我无法弄清楚如何使用Swift从Scenekit SCNFloor类访问属性,在objective-c中他们这样做:

SCNNode*floor = [SCNNode node];
floor.geometry = [SCNFloor floor];
((SCNFloor*)floor.geometry).reflectionFalloffEnd = 10;
Run Code Online (Sandbox Code Playgroud)

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

let levelFloor = SCNNode()
levelFloor.geometry = SCNFloor()
Run Code Online (Sandbox Code Playgroud)

谢谢

编辑感谢您现在的快速反应:)

ric*_*ter 7

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

您可以使用强制转换内联:

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

// Swift
(levelFloor.geometry as SCNFloor).reflectionFalloffEnd = 10
Run Code Online (Sandbox Code Playgroud)

但这可能变得相当笨拙,特别是如果你要在几何上设置一堆属性.我更喜欢只使用局部变量(或常量,因为引用不需要更改):

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)
Run Code Online (Sandbox Code Playgroud)


fqd*_*qdn 3

(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
Run Code Online (Sandbox Code Playgroud)