Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/116.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 未在didBeginContact方法中调用类方法_Ios_Sprite Kit_Skphysicscontact - Fatal编程技术网

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

Ios 未在didBeginContact方法中调用类方法,ios,sprite-kit,skphysicscontact,Ios,Sprite Kit,Skphysicscontact,我创建了两个类:一个处理投射物,另一个处理主场景本身。当我在didMoveToView或任何其他方法中调用类方法来生成投射物时,它可以工作,并且我能够看到投射物。但是,当我希望投射物在接触后繁殖时,它就不起作用了。我之前测试过触点,一切正常。我错过了什么 didBeginContact方法 类方法 我错过了什么?当你遇到问题时,你不能说一切都正常。这就是我想听到更多的东西,特别是方法的哪些部分运行,哪些部分不运行?简单的断点和日志记录就能说明问题。看到有一个日志,你还能说它哪里出了问题吗?@le

我创建了两个类:一个处理投射物,另一个处理主场景本身。当我在didMoveToView或任何其他方法中调用类方法来生成投射物时,它可以工作,并且我能够看到投射物。但是,当我希望投射物在接触后繁殖时,它就不起作用了。我之前测试过触点,一切正常。我错过了什么

didBeginContact方法

类方法


我错过了什么?当你遇到问题时,你不能说一切都正常。这就是我想听到更多的东西,特别是方法的哪些部分运行,哪些部分不运行?简单的断点和日志记录就能说明问题。看到有一个日志,你还能说它哪里出了问题吗?@learncoso2d该方法完全按照我希望的方式工作,它创建并生成一个新的炸弹,在屏幕上生成,无论我在哪里调用该方法,除了didBeginContactit外,其他方法都具有相同的效果。在读了你的评论后,我刚刚修改了代码,添加了一个NSLog,显然该方法确实被调用了,但是对象本身并没有生成。你传递给pattern1的self对象是SKScene吗?@shaish Yep,现在我要添加填充注释,因为字符长度要求。尝试移动patternBomb.position=。。。在创建physicsBody的语句上方。
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;
}