如何将节点与另一个节点连接?

时间:2014-08-09 22:54:27

标签: ios objective-c sprite-kit skspritenode

我在尝试创建平台和中间的无形线时遇到了麻烦,我希望它有一个SKPhysicsBody,这样当英雄角色通过时,它会增加分数,但我似乎无法想象一下可以使用的代码,特别是如何在平台中间创建线,特别是当平台决定移动时。任何提示都会有很大帮助。

                                     |
                                     |
                             ________|_________
                            |        |         |
                            |        |         |
                            |________|_________|

2 个答案:

答案 0 :(得分:1)

这是实现您所描述内容的一种方式。

- (void) didMoveToView:(SKView *)view
{
    // Show outline of physics bodies for debugging purposes.
    self.view.showsPhysics = YES;

    self.physicsBody = [SKPhysicsBody bodyWithEdgeLoopFromRect:self.frame];

    self.backgroundColor = [SKColor colorWithRed:0.15 green:0.15 blue:0.3 alpha:1.0];

    SKSpriteNode *platform = [SKSpriteNode spriteNodeWithColor:[SKColor blueColor] size:CGSizeMake(128, 64)];

    platform.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:platform.size];
    platform.position = CGPointMake(CGRectGetMidX(self.frame),
                                    CGRectGetMidY(self.frame));
    [self addChild:platform];

    SKSpriteNode *line = [SKSpriteNode spriteNodeWithColor:[SKColor redColor] size:CGSizeMake(2, 128)];
    // Line is invisible
    line.hidden = YES;
    // physicsBody of line
    line.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:line.size];

    // Position line...adjust this accordingly
    line.position = CGPointMake(platform.position.x, platform.position.y+line.size.height/4);
    [self addChild:line];

    // Connect nodes with physics joint
    [self connectNode1:platform toNode2:line];

    [platform.physicsBody applyImpulse:CGVectorMake(100.0, 0)];
}

此方法将两个精灵节点在其中点连接到物理关节。

- (void) connectNode1:(SKSpriteNode *)node1 toNode2:(SKSpriteNode *)node2
{
    CGPoint midPoint = CGPointMake((node1.position.x + node2.position.x)/2,
                                   (node1.position.y + node2.position.y)/2);

    SKPhysicsJointFixed *joint = [SKPhysicsJointFixed jointWithBodyA:node1.physicsBody
                                                               bodyB:node2.physicsBody
                                                              anchor:midPoint];
    [self.physicsWorld addJoint:joint];
}

答案 1 :(得分:0)

使用SKNode Class Reference中引用的- (void)addChild:(SKNode *)node将该行设为对象的子项。

如果您不想要子/父关系,可以将该行绑定到对象:

line.position = CGPointMake(object.position.x+10, object.position.y+10)

其中+10是您需要的任何值。如果'对象'移动时,您必须在update:方法中更新线的位置,以跟踪对象的位置。