【问题标题】:Object 'breaks' from falling物体从坠落中“断裂”
【发布时间】:2015-03-11 18:06:43
【问题描述】:

我用 x=25 & y= 25 制作了一个正方形,并附加了一个 SKPhysicsBody。我制作了一个标准平台关卡,它有几个高落区域。我希望广场“打破”/遭受从高处坠落的伤害。我查看了维基百科,发现了牛顿万有引力定律 F=mg。 m是正方形的质量,g是重力。所以我这样做了:

@implementation
{
    double m = square.physicsBody.mass;
    CGVector g = self.physicsWorld.gravity;
    double F;
}

-(void)update:(CFTimeInterval)currentTime
{
    [self fallFormula];
}

-(void)fallFormula
{
    F=m*g;
}

不幸的是,对于程序员来说,我的数学特别差。有人可以帮忙弄清楚如何计算广场坠落时的冲击力吗?在那之后,我会弄清楚正方形会在什么 F 值处“断裂”。顺便说一句,我只知道objective-c(还没有Swift)并且我正在使用SpriteKit。

【问题讨论】:

    标签: objective-c ios8 sprite-kit physics


    【解决方案1】:

    与其尝试所有的现实生活,不如直接设置自己的伤害排名。

    首先声明一个浮点数。然后在更新方法中添加这段代码:

    if(myNode.physicsBody.velocity.dy < myFloat) {
        myFloat = myNode.physicsBody.velocity.dy;
    }
    

    Velocity.dy 是节点物理体的垂直移动。你现在要做的就是根据你的节点达到的最大 dy 速度来设置你的伤害等级。

    要测试 dy 值的工作原理,您可以将其添加到更新方法中:

    NSLog(@"dy velocity = %f",myNode.physicsBody.velocity.dy);
    

    删除您的节点并查看日志。

    【讨论】:

      【解决方案2】:

      您将不得不计算物体行进的距离,该距离可用于计算势能的变化。然后你可以利用力和能量之间的关系来获得力。

      【讨论】:

        【解决方案3】:

        我猜你的方块正在撞到一个平台?如果是这样,最现实的结果是在平台和广场之间使用collision detection

        当平台和正方形碰撞时,您将获得一个SKPhysicsContact 对象,其中包括“collisionImpulse”属性,它可以告诉您两个对象相互碰撞的力度。

        让碰撞工作需要一点点工作,但值得弄清楚,因为它可以让你免于做任何数学运算。

        collisionImpulse 属性随后可用于次要中断或重大中断。很整洁吧?

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-04-21
          • 1970-01-01
          相关资源
          最近更新 更多