在过去的几天里,我一直在努力思考 Xcode 6 和 iOS 8 中的所有优点。我目前正在使用 SceneKit 来了解它可以做什么。
我正在尝试构建一个视觉网格,以使在场景中放置对象更容易一些。
Playground 显示了我的期望,但 Simulator/Device 没有。我不确定这是一个错误,还是我做错了什么。
我有以下代码:
for index in -20..20 {
let i = CFloat(index)
let neg = i - 20
let pos = i + 20
var lat = [
SCNVector3Make(neg, 0, i),
SCNVector3Make(pos, 0, i)
]
var lng = [
SCNVector3Make(i, 0, neg),
SCNVector3Make(i, 0, pos)
]
var indices: CInt[] = [0, 1]
let latSource = SCNGeometrySource(vertices:&lat, count:2)
let lngSource = SCNGeometrySource(vertices:&lng, count:2)
let indexData = NSData(bytes:indices, length:sizeof(CInt) * countElements(indices))
let element = SCNGeometryElement(data:indexData, primitiveType:SCNGeometryPrimitiveType.Line, primitiveCount:2, bytesPerIndex:sizeof(CInt))
let latLine = SCNGeometry(sources:[latSource], elements:[element])
let lngLine = SCNGeometry(sources:[lngSource], elements:[element])
let latLineNode = SCNNode(geometry:latLine)
let lngLineNode = SCNNode(geometry:lngLine)
scene.rootNode.addChildNode(latLineNode)
scene.rootNode.addChildNode(lngLineNode)
}
在 Playground 中,第二行是let i = CGFloat(index)
,但除此之外,Playground 和我拥有的 iOS Xcode 6 项目之间的代码相同。
在操场上,我得到了我想要的网格。然而,在模拟器和设备上,我得到了垃圾。无论我如何更改SCNVector3Make
调用,我都无法让网格在 iOS 或模拟器中正确显示。
还应注意,模拟器和设备上显示的内容是相同的。
我也尝试在场景中添加一个盒子。当我使用SCNBox
它时,它会正确显示 - 尽管比它应该的要大得多。但是,当我使用自定义几何图形(在 Playground 中可以正常工作)时,盒子的尺寸会变大。它看起来更像一堵墙而不是立方体。
我试图包含屏幕截图以显示我所看到的内容,但显然我需要至少 10 个声望点才能发布图像,抱歉。
提前致谢!
更新
要回答以下评论者的问题(关于我如何初始化场景):
在项目中(在 Simulator/Device 中运行)我是这样得到它的:
let scene = SCNScene()
let sceneView = SCNView(frame:UIScreen.mainScreen().bounds)
// Build up grid
sceneView.scene = scene
self.view = sceneView
在操场上,我这样做:
let sceneView = SCNView(frame: CGRect(x: 0, y: 0, width: 500, height: 300))
let scene = SCNScene()
sceneView.scene = scene
XCPShowView("The Scene View", sceneView)
// Build up grid
更新 2
我创建了一个 OSX 应用程序,修改了生成的 GameViewController 代码以生成相同的结构,并且一切都按预期工作。我没有将盒子的颜色更新为红色,并且立方体和相机的位置在 OSX 应用程序中有点不同。
现在我有足够的积分,我将添加显示我所看到的图像。
另外值得注意的是,我在 Xcode Beta 2 和 3 上都试过这个 - 结果是相同的。
我在操场上看到的
我在 OSX 应用程序中看到的内容
我在 iOS 模拟器中看到的
我通过电话和 iPad 从 iOS 8 中删除,所以我没有任何屏幕截图 - 但它们看起来与模拟器相同。
我将通过 Apple 提交一份错误报告。
更新 3
我已经为这些项目创建了存储库,因此任何有兴趣的人都可以看看(也许有些事情我不知道我做错了):
如果您发现我做错了什么或者我可以如何做得更好,请告诉我!
谢谢大家的帮助!