Метод столкновения бурундука cocos2d v3 не срабатывает

Итак, я немного возился с бурундуком, и я могу заставить два спрайта отскакивать друг от друга, но когда я пытаюсь использовать следующий метод, он никогда не срабатывает,

-(BOOL)ccPhysicsCollisionBegin:(CCPhysicsCollisionPair *)pair tower:(CCNode *)nodeA BG:    
   (CCNode *)nodeB
   {
   NSLog(@"HELLO");
   return YES;
   }

Здесь я создаю узел физики:

    _physics = [CCPhysicsNode node];
    _physics.debugDraw = YES;
    [self addChild:_physics z:1];
    _physics.collisionDelegate = self;

Я использую этот код для создания первого спрайта:

    background = [CCSprite spriteWithImageNamed:gameLevelImage];
    [background setPosition:ccp(winSize.width/2,winSize.height/2)];
    background.physicsBody.collisionType = @"BG";
    background.physicsBody = [CCPhysicsBody bodyWithCircleOfRadius:50 andCenter:self.position];

а это для другого:

    tower = [[TowerType alloc] initWithTheGame:self location:ccp(winSize.width/2, winSize.height/2)];
    [towers addObject:tower];
    [self MenuItemsVisible];
    tower.physicsBody = [CCPhysicsBody bodyWithCircleOfRadius:50 andCenter:tower.position];
    tower.physicsBody.collisionType = @"tower";

У меня также есть протокол в файле h.

если кто-нибудь знает, что происходит, помощь будет принята с благодарностью. (:


person user3303990    schedule 16.08.2014    source источник
comment
Есть ли шанс, что вы заставили его работать? Я страдаю от той же проблемы. Кажется, что CollisionType по какой-то причине просто не устанавливается.   -  person SimplyKiwi    schedule 18.08.2014
comment
Нет, до сих пор не нашел, нигде не могу найти ответ ):   -  person user3303990    schedule 18.08.2014
comment
Я бы сказал, просто убедитесь, что ваши спрайты распределены правильно, прежде чем пытаться установить CollisionType. Это было проблемой для меня.   -  person SimplyKiwi    schedule 20.08.2014
comment
Вау, это было и для меня. Спасибо (:   -  person user3303990    schedule 20.08.2014
comment
Отлично, я добавил это как ответ ниже. Примите это, чтобы другим было легче с такой же проблемой.   -  person SimplyKiwi    schedule 20.08.2014


Ответы (2)


Прежде всего, оба тела находятся под одним и тем же CCPhysicsNode?

Во-вторых, ccPhysicsCollisionBegin вызывается только тогда, когда столкновение НАЧИНАЕТСЯ, поэтому, поскольку оба ваших тела находятся одно над другим, и они очевидно будут двигаться вместе из-за гравитации, столкновение никогда не начнется, потому что они начали сталкиваться. Цикл оценки столкновения:

ccPhysicsCollisionBegin: вызывается, когда оба тела начинают сталкиваться
ccPhysicsCollisionPreSolve: вызывается при каждом обновлении кадра, перед физическими расчетами
ccPhysicsCollisionPostSolve: вызывается в каждом кадре, после физических расчетов
ccPhysicsCollisionSeparates: вызывается, когда они разделяются

person Felipe Jun    schedule 27.08.2014

Убедитесь, что ваши спрайты распределены правильно, прежде чем пытаться установить CollisionType. Это было проблемой для меня в моем подобном случае.

person SimplyKiwi    schedule 20.08.2014