Как обнаружить контакт SKSpriteNode, но не реагирует?
У меня есть два SKSpriteNode первый герой
+(id)hero
{
NSMutableArray *walkFrames = [NSMutableArray array];
SKTextureAtlas *heroAnimatedAtlas = [SKTextureAtlas atlasNamed:@"HeroImages"];
int numImages = (int)heroAnimatedAtlas.textureNames.count;
for (int i=1; i <= numImages; i++) {
NSString *textureName = [NSString stringWithFormat:@"hero%d", i];
SKTexture *temp = [heroAnimatedAtlas textureNamed:textureName];
[walkFrames addObject:temp];
}
Hero *hero = [Hero spriteNodeWithTexture:walkFrames[0]];
hero.heroWalkingFrames = walkFrames;
hero.name =@"Hero";
hero.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:hero.size];
hero.physicsBody.categoryBitMask = heroCategory;
hero.physicsBody.categoryBitMask = obstacleCategory | groundCategory | homeCategory | ~goodiesCategory;
return hero;
}
а вторая монета
SKSpriteNode *coin = [SKSpriteNode spriteNodeWithImageNamed:@"coin"];
coin.size = CGSizeMake(10,10);
coin.position = CGPointMake(100,100);
coin.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:coin.size];
coin.physicsBody.contactTestBitMask = coinCategory;
coin.physicsBody.dynamic=NO;
coin.name = @"coin";
[self.world addChild:coin];
И я могу получить обнаружение столкновений с помощью
if([contact.bodyA.node.name isEqual: @"coin"] || [contact.bodyB.node.name isEqual: @"coin"])
{
//[self LevelComplete];
SKNode* coinNode ;
if ([contact.bodyA.node.name isEqual: @"coin"]) {
coinNode=contact.bodyA.node;
}
else{
coinNode=contact.bodyB.node;
}
[coinNode removeFromParent];
NSLog(@"Coin touched");
}
Теперь моя проблема в том, что каждый раз, когда герой прыгает и трогает монету, она падает на землю вместо того, чтобы продолжать прыгать и достигать высоты, на которую он должен. Я знаю, что здесь что-то упущено, но не знаю, что это, так что любой может угодить покажи мне правильное направление, чтобы исправить этот эффект.
1 ответ
Создайте дополнительную "nilCategory" и установите коллизию BitMask вашей монеты.
coin.physicsBody.collisionBitMask = nilCategory;