Sprite kit SpriteKit-计算一个对象撞击另一个对象的次数

Sprite kit SpriteKit-计算一个对象撞击另一个对象的次数,sprite-kit,Sprite Kit,如何让我的应用程序计算此对象的次数: - (SKNode*)addRock { SKSpriteNode* rock = [SKSpriteNode spriteNodeWithImageNamed:@"asteroid"]; //set the position to a random X value rock.position=CGPointMake ([self makeRandomXWBetween:0 and:self.size.width],self.

如何让我的应用程序计算此对象的次数:

    - (SKNode*)addRock {
    SKSpriteNode* rock = [SKSpriteNode spriteNodeWithImageNamed:@"asteroid"];
    //set the position to a random X value
    rock.position=CGPointMake ([self makeRandomXWBetween:0 and:self.size.width],self.size.height);
    rock.name = @"rock";
    rock.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:rock.size];
    rock.physicsBody.usesPreciseCollisionDetection = YES;
    rock.physicsBody.allowsRotation = NO;
    rock.physicsBody.categoryBitMask = rockCategory;
    rock.physicsBody.contactTestBitMask = dodgerCategory;

    [self addChild:rock];

    return self;
}
- (void)createFloor {
    SKNode *floor = [SKNode node];
    floor.physicsBody = [SKPhysicsBody bodyWithEdgeLoopFromRect:CGRectMake(CGRectGetMinY(self.frame),1.0 , CGRectGetWidth(self.frame), 1)];
    floor.physicsBody.categoryBitMask = floorCategory;
    [self addChild: floor];
}
将击中此对象:

    - (SKNode*)addRock {
    SKSpriteNode* rock = [SKSpriteNode spriteNodeWithImageNamed:@"asteroid"];
    //set the position to a random X value
    rock.position=CGPointMake ([self makeRandomXWBetween:0 and:self.size.width],self.size.height);
    rock.name = @"rock";
    rock.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:rock.size];
    rock.physicsBody.usesPreciseCollisionDetection = YES;
    rock.physicsBody.allowsRotation = NO;
    rock.physicsBody.categoryBitMask = rockCategory;
    rock.physicsBody.contactTestBitMask = dodgerCategory;

    [self addChild:rock];

    return self;
}
- (void)createFloor {
    SKNode *floor = [SKNode node];
    floor.physicsBody = [SKPhysicsBody bodyWithEdgeLoopFromRect:CGRectMake(CGRectGetMinY(self.frame),1.0 , CGRectGetWidth(self.frame), 1)];
    floor.physicsBody.categoryBitMask = floorCategory;
    [self addChild: floor];
}
基本上,我希望应用程序计算“addRock”对象与“createFloor”对象接触的次数,以及它们接触的次数是否可以放在左上角


提前感谢您的帮助

创建一个计数器,使用didBeginContact:方法递增计数器并使用计数器更新SKLabelNode

1) 创建计数器:

@implementation MyScene
{
    int counter;
    BOOL updateLabel;
    SKLabelNode *counterLabel;
}

-(id)initWithSize:(CGSize)size
{
    if (self = [super initWithSize:size])
    {
        counter = 0;

        updateLabel = false;

        counterLabel = [SKLabelNode labelNodeWithFontNamed:@"Chalkduster"];
        counterLabel.name = @"myCounterLabel";
        counterLabel.text = @"0";
        counterLabel.fontSize = 20;
        counterLabel.fontColor = [SKColor yellowColor];
        counterLabel.horizontalAlignmentMode = SKLabelHorizontalAlignmentModeCenter;
        counterLabel.verticalAlignmentMode = SKLabelVerticalAlignmentModeBottom;
        counterLabel.position = CGPointMake(50,50); // change x,y to location you want
        counterLabel.zPosition = 900;
        [self addChild: counterLabel];
    }
}
2) 检查联系人:

-(void)didBeginContact:(SKPhysicsContact *)contact
{
    uint32_t collision = (contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask);
    if (collision == (dodgerCategory | floorCategory))
    {
        counter++;
        updateLabel = true;
    }
}
3) 更新标签文本:

-(void)update:(CFTimeInterval)currentTime
{
    if(updateLabel == true)
    {
        counterLabel.text = [NSString stringWithFormat:@"Counter: %i",counter];
        updateLabel = false;
}

当我添加计数器时,计数器不会显示在屏幕上。@user3578149-您是否添加了我注释“在此处设置其余标签属性…”的其余标签属性?我还应该添加什么?这是我迄今为止添加的
counterLabel.fontSize=20;counterLabel.position=CGPointMake(self.size.width/2.0f,self.size.height/1.3f);[自我添加子项:反标签]您应该添加字体的颜色,可能黑底颜色和字体的颜色是相同的。@user3578149-不客气。确保地板和岩石对象的physicsBody.restitution属性设置为零。