我无法弄清楚如何使用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()
由于
编辑感谢您现在的快速反应:)
答案 0 :(得分:7)
无论您是使用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)
答案 1 :(得分: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