5

我不知道如何使用 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()

谢谢

编辑感谢您现在可以使用的快速响应:)

4

2 回答 2

8

无论您使用的是 ObjC 还是 Swift,为了让编译器对您SCNFloor在引用上使用属性或方法感到满意,该引用需要具有 type 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)
于 2014-06-23T19:27:06.767 回答
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
于 2014-06-23T19:21:23.813 回答