相对于根节点移动SCNNode

时间:2014-12-21 01:52:56

标签: scenekit

我正在通过编写一个游戏来学习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"];

小行星移动但可以预测在完成时会重新回到原来的位置。

这感觉就像一个新手的错误,但我找不到任何在线解决这个问题的方法。我是以错误的方式解决这个问题吗?

谢谢, 杰夫

1 个答案:

答案 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);

还要确保这些节点上没有可以覆盖您的更改的动画或物理。