我正在通过编写一个游戏来学习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"];
小行星移动但可以预测在完成时会重新回到原来的位置。
这感觉就像一个新手的错误,但我找不到任何在线解决这个问题的方法。我是以错误的方式解决这个问题吗?
谢谢, 杰夫
答案 0 :(得分:2)
以你的方式移动cameraNode应该可以工作,但要确保“cameraNode”是你当前的pointOfView,否则它将没有效果(检查scnView.pointOfView == cameraNode)。
如果要移动节点,则应翻译“node.transform”(而不是“cameraNode.transform”)。但实际上这样做更简单:
node.position = SCNVector3Make(node.position.x,node.position.y,node.position.z + 2.0);
还要确保这些节点上没有可以覆盖您的更改的动画或物理。