在didBeginContact方法中未调用的类方法

时间:2014-10-29 21:59:38

标签: ios sprite-kit skphysicscontact

我创建了两个类:一个用于处理抛射物和主要场景本身。当我调用类方法来生成抛射物时,在didMoveToView或任何其他方法中,它可以工作,我能够看到射弹。但是,当我希望射弹在接触后产卵时,它不起作用。我之前测试了触点,一切正常。我在这里缺少什么?

didBeginContact Method

static inline Enemies *nodeFromBody(SKPhysicsBody *body1, SKPhysicsBody *body2, uint32_t category) {
    Enemies *node = nil;
    if (body1.categoryBitMask & category) {
        node = (Enemies *)body1.node;
    }
    else if (body2.categoryBitMask & category) {
        node = (Enemies *)body2.node;
    }
    return node;
}

-(void)didBeginContact:(SKPhysicsContact *)contact {

    SKPhysicsBody *firstBody, *secondBody;

    SKSpriteNode *projectile = nil;
    SKSpriteNode *offScreen = nil;
    Enemies *target = nil;

    firstBody = contact.bodyA;
    secondBody = contact.bodyB;

    projectile = nodeFromBody(firstBody, secondBody, projectileCategory);
    offScreen = nodeFromBody(firstBody, secondBody, offScreenCategory);
    target = nodeFromBody(firstBody, secondBody, targetsCategory);

    if (projectile && target) {

        NSLog(@"firstShot");
        [projectile removeFromParent];
        // Below is the class method being invoked.
        [ProjectilePatterns pattern1:self spawnPoint:CGPointMake(CGRectGetMidX(self.frame), CGRectGetMidY(self.frame))];
        [target removeFromParent];
    }
}

班级方法

+(ProjectilePatterns *)pattern1:(SKScene *)scene spawnPoint:(CGPoint)location {

    ProjectilePatterns *patternBomb = [ProjectilePatterns spriteNodeWithColor:[UIColor blueColor] size:CGSizeMake(20, 20)];
    patternBomb.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:patternBomb.size];
    patternBomb.physicsBody.categoryBitMask = projectileCategory;
    patternBomb.physicsBody.contactTestBitMask = targetsCategory | offScreenCategory;
    patternBomb.physicsBody.collisionBitMask = 0;
    patternBomb.physicsBody.friction = 0;
    patternBomb.physicsBody.linearDamping = 0;
    patternBomb.position = CGPointMake(location.x + 20, location.y);
    patternBomb.name = @"p1";
    NSLog(@"works");

    [scene addChild:patternBomb];
    [patternBomb.physicsBody applyImpulse:CGVectorMake(3, 0)];

    return patternBomb;
}

0 个答案:

没有答案