2012-02-24 8 views
0

Привет всем, у меня есть проблема с обнаружением столкновения.cocos2d: обнаружение столкновений не работает правильно

я есть первый метод, который добавлять случайные объекты

-(void)initObjects{ 

    int randomNumber = arc4random() % 5 + 1; 

    switch (randomNumber) { 
     case 1: 
      [self initEnemy]; 
      CCLOG(@"Random number 1"); 
      break; 

     case 2: 
      [self initJetpack]; 
      break; 

     case 3: 
      [self initWine]; 
      break; 

     case 4: 
      // [self initNight]; 
      break; 

     default: 
      CCLOG(@"no number"); 
      break; 
    } 

} 

тогда, когда будет выбрать метод родился объект, и если будет столкновение обнаружения удалить спрайт добавил

код в каждом методе объектов

[self schedule:@selector(collision) interval:1/60]; 

метод столкновения:

-(void)collision { 
    if (CGRectIntersectsRect([_hero boundingBox], [_enemy boundingBox])) { 
     CCLOG(@"Enemy collision intercect"); 
     [self spriteMoveFinished:_enemy]; // It's method like [self removeChild:_enemy cleanup:YES]; 
     [self unschedule:@selector(collision)]; 
    } else if (CGRectIntersectsRect([_hero boundingBox], [_powerNight boundingBox])) { 
     CCLOG(@"PowerNight collision intercect"); 
     // the same up 
    } else if (CGRectIntersectsRect([_hero boundingBox], [_wine boundingBox])) { 
     CCLOG(@"Wine collision intercect"); 
     // the same up 
    } else if (CGRectIntersectsRect([_hero boundingBox], [_jetPack boundingBox])) { 
     CCLOG(@"Jetpack collision intercect"); 
     //the same up 
    } 
} 

теперь интересный журнал

JetPack inizializated вина столкновения intercect (?????????), почему вино ??

враг inizializated Jetpack collision intercect (?????) почему jetPack ??

Но иногда это нормально

враг inizializated противника столкновения intercect

Где я неправ?

спасибо каждое тело приветствий

ответ

0

Ну, в первую очередь, было бы хорошо, чтобы проверить наличие каждого из этих объектов, прежде чем пытаться проверить столкновения. Например:

if (_jetPack) { // Check if jetPack exists 
    if (CGRectIntersectsRect([_hero boundingBox], [_jetPack boundingBox])) { 

    } 
} 

Таким образом, все станет более ясным и безопасным, а также может решить вашу проблему.

+0

его хорошая идея, но не работает, и я не могу ответить и, для моей репутации не –

+0

комментарии правильный способ общения. не пишите ответа, когда это действительно вопрос или комментарий;) – phlebotinum

+0

@GabrieleCarbonai: Но это маловероятно - это означает, что вы * сделали * инициализацию этих объектов, когда вам этого не нужно. Возможно, вам придется показать нам больше вашего кода. – Voldemort

0

да омега вы правы, в первом я совершил ошибку.

спрайт в CCSpriteBatchNode и я назвал так:

[self addChild:nameSprite];

я изменился, как этот (исходный код)

self.jetPack = [CCSprite spriteWithSpriteFrameName:@"jetpack-4.png"];  
_jetPack.position = ccp(480, randomNumber); 
[_batchNode addChild:_jetPack z:3 tag:3]; 

теперь я стараюсь много возможность и я изменить метод столкновения

-(void)collision:(ccTime)dt andTag:(int)tag { 


if (_enemy){ 

    if (CGRectIntersectsRect(_enemy.boundingBox, _hero.boundingBox)) { 
     CCLOG(@"Enemy collision intercect"); 
     [self spriteMoveFinished:_enemy andTag:6]; 
     [self unschedule:@selector(collision)]; 
    } 
}// Continue with another collision 

Я хотел попробовать wi DTH «Тег», но не работает

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

[self schedule:@selector(collision:andTag:) interval:1/60]; 

в методе инициализации там называется метод объекты генератора случайных чисел с

 [self schedule:@selector(initObjects) interval:8]; 

в спрайты успевают скончаться

в журнале это всегда одно и то же

рожденный спрайт правильно, а когда есть какое-то столкновение, иногда это хорошо, а иногда нет.

это походит на simulatore путает спрайт, но странно:

если спрайт _jetPack я контролировать структуру если-то еще, как это возможно, что спрайт идет в столкновение _enemy ??

Надеюсь, что я хорошо объяснил.

спасибо

Смежные вопросы