在初始重力效果结束后,块不会掉落

时间:2015-01-29 21:03:32

标签: ios core-motion scenekit

我有一个简单的场景,有地板,块,相机和灯光。

地板是静止的

SCNNode* floor = [SCNNode node];
SCNPhysicsBody *staticBody = [SCNPhysicsBody staticBody];
floor.physicsBody = staticBody;
[[scene rootNode] addChildNode:floor];

该块是动态的

SCNNode *block = [SCNNode node];
block.position = SCNVector3Make(-10, 45, -20)
block.geometry = [SCNBox boxWithWidth:5 height:5 length:5 chamferRadius:0];
block.physicsBody = [SCNPhysicsBody dynamicBody];

块的起始位置在地板上方,因此当应用程序运行时,块会按预期落到地板上。

我已经添加了动作管理器,它将向下移动楼层,通过将Y中的负面变化转换为块来模拟从块下方拉出的楼层,这就是故障开始的地方。

if(userAcceleration.y < 0)
{
    SCNVector3 vector = floor.position;
    vector.y += userAcceleration.y*10.0; 
    floor.position = vector;
}

如果在块停止之前发生了运动,我可以摇动设备并保持块按预期移动。

但是,如果在块停止几秒钟后发生运动,则块只会在地板上方(每次运动时越来越高)再次下降。

为什么重力影响会停止?

在运动检查期间是否有需要检查重力的东西?或者还有其他我想念的东西?

1 个答案:

答案 0 :(得分:1)

这可能听起来很愚蠢,但您是否将渲染器的playing属性设置为true?

如果这不起作用,我的黑客就是添加一个空的SCNNode,并使用SCNAction使其永久旋转。即使没有任何动作,它也能保持场景渲染/计算。

编辑:我忘记了allowResting财产。这可能是造成问题的原因。只需将其关闭即可!

您可以在此处详细了解:https://developer.apple.com/library/prerelease/ios/documentation/SceneKit/Reference/SCNPhysicsBody_Class/index.html#//apple_ref/occ/instp/SCNPhysicsBody/allowsResting