Как принудить маятниковый путь

Итак, у меня есть спрайт, и у меня есть платформа над ним. Спрайт начинается в точке (0,scene.frame.size.height/2), а платформа - в (scene.frame.size.width/2,scene.frame.size.height-10). Таким образом, спрайт находится слева, а платформа расположена по центру вверху экрана.

Я собираюсь приложить мощный импульс к спрайту. Вектор импульса будет иметь X, но не Y. В принципе, я собираюсь бросить это правильно.

Это должно идти под платформой, и это будет. Я хочу, чтобы он шел по маятниковому пути с точкой поворота, являющейся центром платформы. Более того, я хочу форсировать этот путь. Независимо от объекта х импульс, я хочу, чтобы он качался вдоль этого маятникового пути, не проходя прямо под ним

Если это поможет картина качается с лозы. Я хотел бы, чтобы он принимал во внимание скорость спрайтов, прежде чем схватиться за лозу, но в отличие от реального мира, я хочу, чтобы он заставлял спрайт падать под углом и обратно на угол через маятниковую дорожку.

Мне трудно понять, как я могу поступить примерно так, поэтому любая помощь будет принята с благодарностью. Я знаю, что мне, вероятно, понадобится соединение, чтобы соединить их, и что, если это будет весь импульс Y, я беспокоюсь о том, что, возможно, мне удастся просто с помощью ограничительного сустава, но это усиление пути маятника и преобразование части импульса, которая Я застрял на.

Заранее благодарю за всю вашу помощь.

1 ответ

Решение

Вот пример того, как реализовать 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;
}
Другие вопросы по тегам