Как обнаружить контакт 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;
Другие вопросы по тегам