精灵套装:绳索与SKPhysicsJointLimit在过度用力下打破?

时间:2014-03-20 05:47:26

标签: ios objective-c sprite-kit skphysicsbody

以下代码效果很好。它创造了一条由方形链条制成的悬挂绳索,然后向底部链环施加一个力以使其摆动。在创建SKScene时,它在SKScene对象中执行。

但是,如果将最后一行的力从2000更改为4000,则物理会变得混乱,链接有时会中断。有时链接似乎在振动,或者它们只是完全屈服于引力,好像没有关节一样。另外,如果你有其他物理实体,它们就不会再与乱线链接发生冲突,即使它们在施加力之前也是如此。

尽管4000似乎过度,但是我遇到了这个问题,对较轻的物体的作用力要小得多,或者绳索上的力较小,链接之间的间隙较小。

我做错了吗? Sprite Kit中是否有错误或其他一些解释?我在网上找不到任何答案。

如果在SKScene创建期间施加力或延迟到稍后时间也无关紧要。

self.scaleMode = SKSceneScaleModeAspectFit;
self.anchorPoint = CGPointMake(0.5, 0.5);

CGFloat length = 20;
CGFloat gapMult = 1.8;
int numBoxes = 10;

SKSpriteNode *prevBox = nil;
for (int i = 0; i < numBoxes; i++) {
    SKSpriteNode *box = [SKSpriteNode spriteNodeWithColor:[UIColor yellowColor] size:CGSizeMake(length, length)];
    box.position = CGPointMake(0, -i * length * gapMult);
    [self addChild:box];

    box.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:CGSizeMake(length, length)];
    if (i == 0) {
        box.physicsBody.dynamic = NO;
    } else {
        CGPoint pt1 = CGPointMake(0, prevBox.position.y - length / 2);
        CGPoint pt2 = CGPointMake(0, box.position.y + length / 2);

        SKPhysicsJointLimit *joint = [SKPhysicsJointLimit jointWithBodyA:prevBox.physicsBody bodyB:box.physicsBody anchorA:pt1 anchorB:pt2];
        [self.physicsWorld addJoint:joint];
    }

    prevBox = box;
}

[prevBox.physicsBody applyForce:CGVectorMake(2000, 0)];

0 个答案:

没有答案