我正在通过编写一个游戏来躲避物体的小游戏来学习SceneKit。最初,我是通过移动/旋转相机来完成此操作的,但是我意识到在某个时候我会用完坐标空间,最好将所有对象移向相机(并在“通过”他们)。
但是我似乎无法让他们动弹。我移动相机的原始代码如下所示:
[cameraNode setTransform:CATransform3DTranslate(cameraNode.transform, 0.f, 0.f, -2.f)];
我以为我可以对每个小行星节点做类似的事情:
[asteroidNode setTransform:CATransform3DTranslate(cameraNode.transform, 0.f, 0.f, 2.f)];
但他们不会动。如果添加基本动画:
CABasicAnimation *anim = [CABasicAnimation animationWithKeyPath:@"position.z"];
anim.byValue = @10;
anim.duration = 1.0;
[asteroidNode addAnimation:anim forKey:@"move forward"];
小行星会移动,但是可以预测到它完成后会回到其原始位置。
这感觉像是一个菜鸟的错误,但我找不到任何可以在线解决此问题的方法。我会以错误的方式处理吗?
谢谢杰夫
按您的方式移动cameraNode应该可以,但是请确保“ cameraNode”是当前的pointOfView,否则将无效(请检查scnView.pointOfView == cameraNode)。
如果要移动节点,则应转换“ node.transform”(而不是“ cameraNode.transform”)。但是实际上,这样做更简单:
node.position = SCNVector3Make(node.position.x,node.position.y,node.position.z + 2.0);
另外,请确保这些节点上没有正在运行的动画或物理可以覆盖您的更改。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句