物体 'breaks' 坠落

Object 'breaks' from falling

我制作了一个 x=25 & y= 25 的正方形,并附加了一个 SKPhysicsBody。我制作了一个标准的平台关卡,其中有几个高落区域。我希望正方形 'break'/ 因从高处掉落而受到损坏。我看了维基百科,发现牛顿万有引力定律 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;
}

不幸的是,对于一个程序员来说,我的数学特别差。有人可以帮忙弄清楚如何计算广场坠落的影响力吗?之后,我将计算出正方形 'break' 的 F 值。顺便说一句,我只知道objective-c(还不知道Swift),我正在使用SpriteKit。

你将不得不计算物体移动的距离,它可以用来计算势能的变化。然后你可以利用力和能量之间的关系得到力。

为什么不设置自己的速度来破坏排名,而不是试图在这里度过所有现实生活。

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

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

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

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

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

放下您的节点并查看日志。

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

当平台和广场发生碰撞时,您将获得一个 SKPhysicsContact 物体,其中包括 "collisionImpulse" 属性 可以告诉您两个物体碰撞的强度彼此。

让碰撞正常工作需要一点点工作,但值得把它搞清楚,因为它会让你免于做任何数学运算。

collisionImpulse 属性 可用于小破或大破。很整洁吧?