初始重力效应结束后方块不会掉落
Block Won't Fall After Initial Gravity Effects End
我有一个简单的场景,有地板、街区、相机和灯光。
地板是静态的
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;
}
如果运动发生在方块静止之前,我可以摇动设备并让方块按预期移动。
但是,如果运动发生在方块静止几秒钟之后,则方块只会上升(每次运动越来越高)到地板上方而不会再掉落。
为什么重力影响似乎停止了?
在运动检查期间,是否需要检查某些可以关闭重力的东西?还是我还缺少其他东西?
这听起来可能很傻,但是您是否将渲染器的 playing
属性 设置为 true?
如果这不起作用,我的技巧是添加一个空的 SCNNode 并使用 SCNAction 使其永远旋转。即使没有任何移动,它也会让场景 rendering/calculations 继续。
编辑:我忘记了 allowResting
属性。这可能是导致您出现问题的原因。只需为您的对象关闭它!
我有一个简单的场景,有地板、街区、相机和灯光。
地板是静态的
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;
}
如果运动发生在方块静止之前,我可以摇动设备并让方块按预期移动。
但是,如果运动发生在方块静止几秒钟之后,则方块只会上升(每次运动越来越高)到地板上方而不会再掉落。
为什么重力影响似乎停止了?
在运动检查期间,是否需要检查某些可以关闭重力的东西?还是我还缺少其他东西?
这听起来可能很傻,但是您是否将渲染器的 playing
属性 设置为 true?
如果这不起作用,我的技巧是添加一个空的 SCNNode 并使用 SCNAction 使其永远旋转。即使没有任何移动,它也会让场景 rendering/calculations 继续。
编辑:我忘记了 allowResting
属性。这可能是导致您出现问题的原因。只需为您的对象关闭它!