【问题标题】:Block Won't Fall After Initial Gravity Effects End初始重力效果结束后方块不会掉落
【发布时间】:2015-03-29 06:13:07
【问题描述】:

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

地板是静止的

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;
}

如果运动发生在积木静止之前,我可以摇晃设备并保持积木按预期移动。

但是,如果运动发生在积木静止几秒钟后,积木只会上升(随着每次运动而越来越高),不会再跌落。

为什么重力影响似乎停止了?

在运动检查期间我需要检查什么可以关闭重力吗?还是我还缺少其他东西?

【问题讨论】:

    标签: ios core-motion scenekit


    【解决方案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

    【讨论】:

    • 谢谢,看来只是设置allowResting
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-30
    • 1970-01-01
    • 2012-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多