CCPhysicsBody Collision не работает в cocos2d-swift v3.4

Вот код:

@interface MainScene : CCNode<CCPhysicsCollisionDelegate>

//.m

-(void)onEnter
{
    [super onEnter];

    mPhysicsWorld = [CCPhysicsNode node];
    mPhysicsWorld.gravity = ccp(0,0);

    mPhysicsWorld.debugDraw = YES;
    mPhysicsWorld.collisionDelegate = self;

    [self addChild:mPhysicsWorld];

    //Body_A
    {
        CCSprite *sprite = [CCSprite spriteWithImageNamed:@"sprite_1.png"];
        sprite.position = ccp(280, 220);
        sprite.rotation = 13;
        sprite.name = @"Body_A";
        sprite.physicsBody.collisionGroup=@"Group1";
        sprite.physicsBody.collisionType=@"typeA";
        CGRect rect = {CGPointZero, sprite.contentSize};
        CCPhysicsBody *body = sprite.physicsBody = [CCPhysicsBody bodyWithRect:rect cornerRadius:0.0];
        body.velocity = ccp(1000, 2000);
        body.angularVelocity = 1.0;
        body.type = CCPhysicsBodyTypeDynamic;

        [mPhysicsWorld addChild:sprite];
    }

    //Body_B
    {
        CCSprite *sprite = [CCSprite spriteWithImageNamed:@"sprite_2.png"];
        sprite.position = ccp(380, 220);
        sprite.rotation = 13;
        sprite.name = @"Body_B";
        sprite.physicsBody.collisionGroup=@"Group2";
        sprite.physicsBody.collisionType=@"typeB";
        CGSize size = sprite.contentSize;
        CGPoint points[] = {
            ccp(0, 0),
            ccp(size.width, 0),
            ccp(size.width/2, size.height),
        };

        CCPhysicsBody *body = sprite.physicsBody = [CCPhysicsBody bodyWithPolygonFromPoints:points count:3 cornerRadius:0.0];
        body.velocity = ccp(1000, -1000);
        body.angularVelocity = -1.0;
        body.type = CCPhysicsBodyTypeDynamic;

        [mPhysicsWorld addChild:sprite];
    }

//Метод делегирования

- (BOOL)ccPhysicsCollisionBegin:(CCPhysicsCollisionPair *)pair typeA:(CCNode *)nodeA typeB:(CCNode *)nodeB
{
    printf("Function Called\n"); //control not coming here
    if([nodeA.name isEqualToString:@"Body_A"] &&  [nodeB.name isEqualToString:@"Body_B"])
    {
        return YES;
    }

    return NO;
}

Аналогичный вопрос: уже пробовал этот аналогичный пост, но не нашел решения.


person Guru    schedule 24.02.2015    source источник
comment
Не уверен, но думаю, что эта тема может иметь отношение к вашему вопросу: forum.cocos2d-spritebuilder.org/t/   -  person YvesLeBorg    schedule 01.03.2015
comment
Я пробовал это в методе инициализации, но ничего не отображалось.   -  person Guru    schedule 02.03.2015
comment
@YvesLeBorg, вот код: app.box.com/s/c5csoh5bbmnfc8zx34jsngzx42gsh13n   -  person Guru    schedule 02.03.2015
comment
если вы не возражаете, проверьте код в свободное время и дайте мне ответ. Я могу предложить награду. Спасибо за ваше время   -  person Guru    schedule 02.03.2015


Ответы (1)


вы, вероятно, собираетесь "ладонь в лоб", мне тоже потребовалось время :(

Для тела A и тела B две строки ниже

sprite.physicsBody.collisionGroup=@"Group1";
sprite.physicsBody.collisionType=@"typeA";

выполняются, пока физика тела все еще равна нулю. Переместите строки под строку:

CCPhysicsBody *body = sprite.physicsBody = [CCPhysicsBody bodyWithRect:rect cornerRadius:0.0];

об цит. проверено и проверено, работает на сим и устройстве. Удачи тебе с твоим проектом.

person YvesLeBorg    schedule 02.03.2015
comment
:- Извините за простую ошибку. Большое спасибо за ваше время. - person Guru; 03.03.2015
comment
@DustBin удалил комментарий. каким-то образом я смог вывести родословную :) ... но я не могу точно вспомнить, как (вероятно, URL). Тогда вам тоже следует удалить свой комментарий. - person YvesLeBorg; 03.03.2015