如何实施摆锤路径

时间:2014-10-01 06:30:44

标签: objective-c xcode sprite-kit skphysicsbody skphysicsjoint

好的,所以我有一个精灵,我上面有一个平台。精灵从点(0,scene.frame.size.height / 2)和平台(scene.frame.size.width / 2,scene.frame.size.height-10)开始。因此精灵位于左侧,平台位于屏幕顶部的中心位置。

我将对精灵施加强大的冲动。冲动的矢量将有一个X但没有Y.基本上我会把它扔掉。

它应该在平台下面,它会。我想要它做的是遵循摆动路径,枢轴点是平台中心。更重要的是,我想强迫这条道路。无论物体x的动量如何,我都希望它不得不沿着那条摆动路径摆动,而不是直接从它下面穿过它

如果它有助于图片从藤蔓摆动。我想在抓住藤蔓之前考虑到精灵的速度,但与现实世界不同,我希望它强制精灵以一个角度向下倾斜并通过一个像路径一样的角度向后倾斜。

我很难弄清楚如何能够做到这样的事情,所以任何帮助都会非常感激。我知道我可能需要一个联合来连接这两个,如果它是所有的Y动量,我担心我可能只是一个限制关节逃脱,但它强制摆动路径和转换动量部分,我被困住了。

提前感谢您的所有帮助。

1 个答案:

答案 0 :(得分: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;
}