2012-03-01 1 views
2

다음 코드로 게임을 실행할 때 플레이어가 enemy2와 교차하여 디버그 consel에서 다음 오류가 발생하면 게임이 충돌합니다.Cocos2d CCSprite 위치 Deallocated 오류

오류 : *** -[CCSprite position]: message sent to deallocated instance 0xa8cabd0

코드 :

// Check if enemy2 is a child of the layer 
if (enemy2) { 
    CGRect enemy2Rect = CGRectMake(
            enemy2.position.x - (enemy2.contentSize.width/2), 
            enemy2.position.y - (enemy2.contentSize.height/2), 
            80, 
//     ERROR HAPPENS HERE Stopped at thread 1  
            41); 
    // check if player intersects the enemy 
    if (CGRectIntersectsRect(playerRect, enemy2Rect)) { 
     // check if the power up is true 
     if (bustEmUp == TRUE) { 
      enemy2Hit = TRUE; 
      [self unschedule:@selector(collisionDetection)]; 
      [self removeChild:enemy2 cleanup:YES]; 
      id delay = [CCDelayTime actionWithDuration:15]; 
      id addEnemy = [CCCallFunc actionWithTarget:self selector:@selector(addEnemy2)]; 
      [self runAction:[CCSequence actions:delay,addEnemy, nil]]; 
      [self schedule:@selector(collisionDetection) interval:0.01]; 
     } else { 
      // if not then collide 
      [self schedule:@selector(collisionAlert)]; 
     } 
    } 
} 

이를 heres 내 역 추적이 도움이된다면 :

#0 0x01a83e1e in ___forwarding___() 
#1 0x01a83ce2 in __forwarding_prep_0___() 
#2 0x000e4fab in -[Survival collisionDetection] (self=0x12b975c0, _cmd=0x14a5e0) at Survival.m:521 
#3 0x0005babb in -[CCTimer update:] (self=0x1281af50, _cmd=0x13347c, dt=0.0494979993) at CCScheduler.m:141 
#4 0x00064a20 in -[CCScheduler tick:] (self=0xa8c9b70, _cmd=0x13c8fa, dt=0.0494979993) at CCScheduler.m:606 
#5 0x0008d9ef in -[CCDirectorIOS drawScene] (self=0x9466d20, _cmd=0x136bdf) at CCDirectorIOS.m:152 
#6 0x0008ffda in -[CCDirectorDisplayLink mainLoop:] (self=0x9466d20, _cmd=0x142bcd, sender=0x1208c2b0) at CCDirectorIOS.m:721 
#7 0x005e22db in CA::Display::DisplayLink::dispatch() 
#8 0x005e21af in CA::Display::TimerDisplayLink::callback() 
#9 0x01af1966 in __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__() 
#10 0x01af1407 in __CFRunLoopDoTimer() 
#11 0x01a547c0 in __CFRunLoopRun() 
#12 0x01a53db4 in CFRunLoopRunSpecific() 
#13 0x01a53ccb in CFRunLoopRunInMode() 
#14 0x021c8879 in GSEventRunModal() 
#15 0x021c893e in GSEventRun() 
#16 0x00b63a9b in UIApplicationMain() 
#17 0x000c083f in main (argc=1, argv=0xbffff5a0) at main.m:14 

를을 heres 내가 enemy2 초기화 여기서

enemy2 = [CCSprite spriteWithFile:@"SpaceShip2.png"]; 
enemy2.position = ccp(500,700); 
[self addChild:enemy2]; 
+0

enemy2 변수를 초기화하는 코드를 입력하십시오. – Mazyod

답변

2

적 2가 석방되었을 것입니다. enemy2는 주소이고 nil이 아니기 때문에 귀하의 if(enemy2) 수표를 전달할 것입니다.하지만 그 주소에있는 개체의 할당이 해제되었습니다.

+0

괜찮 았나? BOOL을 사용하여 활성 상태인지 아닌지를 확인했지만 적군은 결국 위험에 처하게됩니다. – mattblessed

+0

@Skullz 코드를 확인하십시오. 어딘가에'enemy2'를 풀어 주시겠습니까 – 0xDE4E15B

+0

'[self removeChild : enemy2 cleanup : YES];'스프라이트를 풀어 주시겠습니까? – mattblessed