2014-01-28 5 views
2

Я пытаюсь программно построить маятник с помощью iOS SpriteKit, используя встроенную физику.SpriteKit - рисовать динамическую линию между соединениями

В настоящее время у меня есть маятник маятника, вес и ограниченное суставное, что позволяет весу колебаться ... Но я понятия не имею, как закодировать линию (стержень) между стержнем и весом.

Я предполагаю, что рисование линии с помощью SKShapeNode было бы началом ...?

-(void)setupPendulum 
{ 
    pivot = [SKSpriteNode spriteNodeWithImageNamed:@"pivot.png"]; 
    pivot.position = CGPointMake(self.size.width/2, self.size.height/2); 
    pivot.physicsBody = [SKPhysicsBody bodyWithCircleOfRadius:1.0]; 
    pivot.physicsBody.dynamic = NO; 
    pivot.physicsBody.affectedByGravity = NO; 
    pivot.xScale = 0.25; 
    pivot.yScale = 0.25; 
    [self addChild:pivot]; 

    weight = [SKSpriteNode spriteNodeWithImageNamed:@"weight.png"]; 
    weight.position = CGPointMake(150, 512); 
    weight.physicsBody = [SKPhysicsBody bodyWithCircleOfRadius:100.0]; 
    weight.physicsBody.dynamic = YES; 
    weight.physicsBody.affectedByGravity = YES; 
    weight.physicsBody.mass = 0.5; 
    weight.xScale = 0.75; 
    weight.yScale = 0.75; 
    [self addChild:weight]; 

    SKPhysicsBody *ab = pivot.physicsBody; 
    SKPhysicsBody *bb = weight.physicsBody; 
    CGPoint ap = pivot.position; 
    CGPoint bp = weight.position; 
    SKPhysicsJointLimit *joints = [SKPhysicsJointLimit jointWithBodyA:ab 
                   bodyB:bb 
                   anchorA:ap 
                   anchorB:bp]; 
    [self.physicsWorld addJoint:joints]; 
} 
+1

Правильно, 'SKShapeNode', где вы должны начать. – prototypical

+0

Спасибо, что подтвердили, что @prototypical, какие-либо рекомендации относительно того, как я буду реализовывать это правильно? – August

+0

Лично я бы начал с справки справки и программирования SpriteKit для всего, о чем я хотел узнать больше. https://developer.apple.com/LIBRARY/IOS/documentation/GraphicsAnimation/Conceptual/SpriteKit_PG/OtherNodeClasses/OtherNodeClasses.html#//apple_ref/doc/uid/TP40013043-CH10-SW14 – prototypical

ответ

4

Мой проект потребовал SKPhysicsJointLimit вместо булавки, поэтому после многих проб и ошибок я нашел следующее решение. Линия удаляется и рисуется в didSimulatePhysics. Линия соединяет «satelliteShip», поскольку она вращается вокруг «motherShip». Я новичок во всем этом, поэтому я ценю любые отзывы об этом подходе.

переменных установки первый:

SKShapeNode *_lineNode; 

Теперь нарисуйте линию в didSimulatePhysics:

- (void)didSimulatePhysics { 
    if (_lineNode){ 
     [_lineNode removeFromParent]; 
    } 
    SKNode *satelliteShip = [self childNodeWithName:kSatelliteShipName]; 
    CGMutablePathRef pathToDraw; 
    pathToDraw = CGPathCreateMutable(); 
    CGPathMoveToPoint(pathToDraw, NULL, motherShip.position.x, motherShip.position.y); 
    CGPathAddLineToPoint(pathToDraw, NULL, satelliteShip.position.x, satelliteShip.position.y); 
    CGPathCloseSubpath(pathToDraw); 

    _lineNode = [SKShapeNode node]; 
    _lineNode.path = pathToDraw; 
    CGPathRelease(pathToDraw); 
    _lineNode.strokeColor = [SKColor grayColor]; 
    [self addChild:_lineNode]; 
} 
+0

Это выглядит интересно, я скоро дам ему вихрь и постараюсь дать вам обратную связь. До сих пор, похоже, отличный ответ на мой вопрос. Благодаря! – August

+0

Ссылка на этой странице представляет собой перенаправление на профиль Linkedin. –

1

Правильное направление было смотреть на SKPhysicsJointPin, который может использовать SKShapeNode или SKSpriteNode (и т.д.).

https://developer.apple.com/library/iOS/documentation/SpriteKit/Reference/SKPhysicsJointPin_Ref/Reference/Reference.html

Примечание О мой вопрос и комментарии к нему:

Поскольку там не очень много документации (в настоящее время) на SpriteKit за пределами (небольшой книги размера) ссылка на Apple, и захват одноклассников-примеров/обучающих онлайн-приложений - ответы большинства людей - «просто посмотрите его + Cocos2d в google» и просто повторите это. Это хорошо, но я не являюсь копией своего персонажа. Мне нравится изучать лучший способ, который является устойчивым и многоразовым. Вот почему я спросил, что лучший способ сделать это, или опубликовать Busted Cocos2d портированный код для копирования-вставки и позволить кому-то заполнить пробелы, как я вижу, случаются слишком часто.

Смежные вопросы