0

好的,所以我有一个精灵,我在它上面有一个平台。精灵从点 (0,scene.frame.size.height/2) 开始,平台从 (scene.frame.size.width/2,scene.frame.size.height-10) 开始。所以精灵在左边,平台在屏幕的顶部居中。

我将在精灵上施加一个强大的脉冲。冲动的向量将有一个 X 但没有 Y。基本上我要把它扔对了。

它应该在平台下方,它会。我想要它做的是沿着以平台中心为支点的钟摆路径。更重要的是,我想强行这条道路。无论物体 x 动量如何,我都希望它必须沿着钟摆路径摆动,而不是直接从它下面穿过

如果它有助于描绘从藤蔓上摆动的画面。我希望它在抓住藤蔓之前考虑精灵的速度,但与现实世界不同,我希望它通过钟摆状的路径迫使精灵以一个角度下降并返回一个角度。

我很难弄清楚如何去做这样的事情,所以任何帮助都将不胜感激。我知道我可能需要一个关节来连接两者,如果我担心的都是 Y 动量,我可能只用一个极限关节就可以逃脱,但它是强制钟摆路径并转换动量部分我被困住了。

预先感谢您的所有帮助。

4

1 回答 1

2

下面是一个如何实现 SKPhysicsJointPin 的示例:

-(id)initWithSize:(CGSize)size {

    if (self = [super initWithSize:size]) {

        CGPoint location = CGPointMake(self.frame.size.width/2, self.frame.size.height/2);

        // Create the pendulum's pivot
        SKSpriteNode *sprite = [SKSpriteNode spriteNodeWithColor:[SKColor whiteColor] size:size];
        sprite.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:sprite.size];
        sprite.physicsBody.dynamic = NO;

        sprite.position = location;
        sprite.size = CGSizeMake(8, 8);

        [self addChild:sprite];

        location = CGPointMake(self.frame.size.width/2-100, self.frame.size.height/2);
        size = CGSizeMake(50, 200);

        // Create the pendulum's bob
        SKSpriteNode *sprite2 = [SKSpriteNode spriteNodeWithColor:[SKColor whiteColor] size:size];
        sprite2.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:sprite.size];
        sprite2.physicsBody.dynamic = YES;
        sprite2.physicsBody.affectedByGravity = YES;
        sprite2.physicsBody.linearDamping = 0;

        sprite2.physicsBody.mass = 0.1;

        sprite2.size = CGSizeMake(32, 32);
        sprite2.position = location;
        [self addChild:sprite2];

        CGPoint point = CGPointMake(self.frame.size.width/2, self.frame.size.height/2);

        // Create a joint that connects the pivot and the bob
        SKPhysicsJointPin *pinJoint = [SKPhysicsJointPin jointWithBodyA:sprite.physicsBody
                                                                  bodyB:sprite2.physicsBody anchor:point];

        // Add the joint to the world
        [self.physicsWorld addJoint:pinJoint];
    }
    return self;
}
于 2014-10-03T08:25:45.457 回答