我遇到了意外地改变场景工具包中的观点的问题。
在调试时我可以看到self.sceneView.pointOfView
有前一个摄像机节点,并且设置新的摄像机节点不会影响屏幕上的任何内容。即使没有setCompletionBlock
,它也会意外发生。有时它会在第一次更改视图后发生,有时会在稍后时间发生。然后无法更改,我必须杀死并重新启动才能使其正常工作。知道我做错了什么吗?收到NSNotification
[SCNTransaction begin];
[SCNTransaction setAnimationDuration:4];
[SCNTransaction setAnimationTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn]];
MenuEntery *menu = [notification object];
switch (menu.menuEntryType)
{
case kMenuS:
{
self.sceneView.pointOfView = _cameraNodeForS;
[SCNTransaction setCompletionBlock:^{
[SCNTransaction begin];
[SCNTransaction setAnimationDuration:2];
[SCNTransaction setAnimationTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut]];
self.sceneView.pointOfView = _cameraNodeForS2;
[SCNTransaction commit];
}];
break;
}
//and other cases will here in between
}
[SCNTransaction commit];
编辑:摄像头
_cameraNodeForS = [SCNNode node];
_cameraNodeForS.camera = [SCNCamera camera];
_cameraNodeForS.position = SCNVector3Make(0, 0, S_DIST);
_cameraNodeForS.camera.xFov = 50;
_cameraNodeForS.camera.zFar = 2100000;
_cameraNodeForS.camera.aperture = 1/50;
_cameraNodeForSOrbit = [SCNNode node];
[_cameraNodeForSOrbit addChildNode:_cameraNodeForS];
_cameraNodeForS2 = [SCNNode node];
_cameraNodeForS2.camera = [SCNCamera camera];
_cameraNodeForS2.position = SCNVector3Make(0, 0, 10000);
_cameraNodeForS2.camera.xFov = 50;
_cameraNodeForS2.camera.zFar = 2100000;
_cameraNodeForS2.camera.aperture = 1/50;
_cameraNodeForS2Orbit = [SCNNode node];
[_cameraNodeForS2Orbit addChildNode:_cameraNodeForS2];
答案 0 :(得分:0)
这就是我解决由我引起的问题的方法。首先是关于这个项目。我有一个SCNView
SKScene
与UITableViewController
。该表包含指向场景上节点的不同单元格的菜单。每个节点都有自己的摄像头。如果用户选择菜单条目,则视点会根据问题中的说明更改为该对象的相机。除了动画相机到相机的变化之外,当用户触摸并拖动屏幕时,我不得不为相机轨道制作动画。所以我在开始时使用了SCNTransaction
,但却以某种方式错误地禁用了行[SCNTransaction commit];
。重新学习的一课,对于每个“开始”需要“提交”,否则会发生意外行为。(解决方案提醒我忘记提交sqlite插入或更新)。