2013-04-16 2 views
0

Im 일반적으로 cocos2d 및 objective-c에 다소 새로운 것이므로 나와 함께 참아주십시오. 내 코드에서 EXC_BAD_ACCESS 오류가 발생하여 일반적으로 수행 한 작업을 수행하고 NSZombies를 활성화했습니다. 이것은 일반적으로 유용한 것을 내뱉지만, 이번에는 아무것도 내뱉지 않고 프로그램이 중단되지 않습니다.cocos2d의 EXC_BAD_ACCESS

충돌이 내 적 클래스

- (void)update:(ccTime)delta{ 
    speed = SPEED; 
    angleToTargetInRadians = -atan2((self.position.y-target.position.y),(self.position.x-target.position.x)); 

속도의 업데이트 기능의 두 번째 줄 동안 와서 angleToTargetInRadians는 헤더 파일에 정의 모두 두 배입니다.

4 번째 또는 5 번째 적을 살해 할 때 충돌이 발생합니다.

- (void)die { 
//give the player some points 
[((AppController *)[UIApplication sharedApplication].delegate) addScore:POINTVALUE]; 
//make the shattered sprite 
ShatteredSprite * blownUpShip = [ShatteredSprite shatterWithSprite:self piecesX:4 piecesY:4 speed:3 rotation:.02]; 
//add it to the layer 
[self.parent addChild:blownUpShip]; 

//set the position and momentum and scale 
[blownUpShip setVx: Vx]; 
[blownUpShip setVy: Vy]; 
[blownUpShip setScale:self.scale]; 
[blownUpShip setPosition:self.position]; 
[blownUpShip setRotation:self.rotation]; 

//get rid of the old ship 
[self removeSelf]; 
} 

- (void)removeSelf { 
//remove self from array 
NSMutableArray * enemies = [((AppController *)[UIApplication sharedApplication].delegate) Enemies]; 
[enemies removeObject:self]; 

[super die]; 
} 

는 [슈퍼 다이] 다만

[self removeFromParentAndCleanup:FALSE]; 

도움이 이해된다! 감사!

+0

대신 [[self removeFromParentAndCleanup : YES];를 호출하지 않는 이유는 무엇입니까? – ssantos

+0

@ssantos 응답 해 주셔서 감사합니다! 방금 시도했는데 [자식 setParent : nil]에 다른 나쁜 액세스를 호출합니다. in - (void) detachChild : (CCNode *) 자식 정리 : (BOOL) CCNode.m 파일의 doCleanup. –

+0

ARC 또는 ARC 없음? Xcode에서 전역 예외 브레이크 포인트를 활성화 했습니까 (실제 공격 라인을 보는데 도움이됩니까?) 정리 작업을 수행해야합니다 : 남은 작업을 중단하고 적의 스케줄 된 선택자가 계속 실행되며 정리 방법도 호출되지 않기 때문에 YES입니다. 정리를하지 않는 유일한 이유는 다른 노드에 즉시 노드를 다시 추가하려는 경우입니다. – LearnCocos2D

답변

0

ShatteredSprite 이니셜 라이저로 전달되는 배 객체를 ShatteredSprite 이내에 사용합니까?

당신이 뭔가를하고 있다는 것을 나에게 보인다

(이것은 단지 추측이다) :

  1. 과 같이이 스프라이트를 추가
  2. (아마 오토 릴리즈) 적 선박에 대한 새로운 스프라이트를 초기화 선박이 파괴 될 때, 새로운 스프라이트를 초기화
  3. 노드와 원수 변경 가능한 배열에 아이 (선박 스프라이트와 ShatteredSprite)
  4. 은 부모 노드에서 AND 적 배열에서 선박 스프라이트를 제거 ->에서 이번에는, 남겨둔 refe가 없다 rence 그리고 그러므로 배는 풀어 놓을 준비가되어있다.

따라서 우주선 스프라이트를 ShatteredShip에 그대로 사용하고 있습니까?

Xcode의 제품 메뉴에서 분석 도구를 사용하여 유용한 정보를 찾을 수 있습니다.