0

我的场景包含;
场景根部的静态物体

_firstNode = [[SCNNode alloc] init];
_firstNode.position = SCNVector3Make(0, 0, 0);
_firstNode.geometry = [SCNSphere sphereWithRadius:950];
_firstNode.geometry.firstMaterial.diffuse.contents = [UIColor greenColor];
_firstNode.physicsBody = [SCNPhysicsBody staticBody];
 [[scene rootNode] addChildNode:_firstNode];  

一个动态体,其枢轴属性位于 (0,-1000,0) 处,并SCNAction永久围绕静态体旋转。

_secondNode = [[SCNNode alloc] init];
_secondNode.position = SCNVector3Make(0, 0, 0);
_secondNode.pivot = SCNMatrix4MakeTranslation(0, -1200, 0);
_SecondNode.physicsBody = [SCNPhysicsBody dynamicBody];
_secondNode.geometry = [SCNSphere sphereWithRadius:2];
_secondNode runAction:[SCNAction repeatActionForever:[SCNAction rotateByX:-1 y:0 z:0 duration:10.0]]];
[[scene rootNode] addChildNode:_secondNode];

当我尝试申请时;

[_secondNode.physicsBody applyTorque:SCNVector4Make(0, 1, 0, 1) impulse:YES];

对节点没有影响,就好像它被声明为静态主体一样。

4

2 回答 2

0

对于物理模拟节点需要分配一个物理形状,这是通过;

_secondNode.physicsBody.physicsShape = [SCNPhysicsShape shapeWithGeometry:[SCNSphere sphereWithRadius:2] options:nil];

于 2014-08-03T11:25:59.773 回答
0

如果我正在正确阅读您想要的内容,请将您的第二个节点设置为...

_secondNode.position = SCNVector3Make(0,-1200,0);

这将从 firstNode 开始设置

然后像这样设置它的枢轴点......

_secondNode.pivot = _firstNode.pivot;

这会将枢轴设置为与您的 firstNode 相同的点,并允许它围绕该点旋转。这仅在您的 firstNode 枢轴属性未更改时才有效。

最后像这样设置你的动作......

SCNAction rotateByX:M_PI*2 y:0 z:0 duration:10.0

请注意,我将您的 x 设置更改为等于 360 度的 M_PI*2。您可以使用“-M_PI”以相反的方式旋转。

于 2014-07-28T01:33:50.627 回答