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属性设置为零。