2012-05-08 5 views
0

저는 cocos2d 및 box2d로 게임을 개발 중입니다. 문제는 화면을 터치하여 플레이어를 점프하게 만들 때 내 앱이 충돌하는 경우가 있습니다. 여기플레이어 점프 동작으로 인해 때때로 EXC_BAD_ACCESS가 발생합니다.

는 내 플레이어 클래스에서 점프 동작을 구현하는 방법입니다

- (void)jump 
{ 
if (numFootContacts > 0) 
    { 
     isJumping = YES; 
     b2Vec2 impulse = b2Vec2(0.0f, 100.0f); 
     b2Vec2 point = body->GetWorldCenter();  // this line sometimes triggers an EXC_BAD_ACCESS for the body pointer. 

     body->ApplyLinearImpulse(impulse, point); 
    } 
} 

numFootContacts 내가 바닥에 또는 아니에요 알고 나를 수 있습니다. 나는 다른 사람의 코드에서 본 것을에서

- (BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event 
{ 
    [player jump]; 
    return YES; 
} 

, 이것은 점프 동작을 구현하는 일반적인 방법입니다 :

그리고 내 게임 장면에서

나는이 (및 기타 비 관련 물건을)이있다.

문제는 물리 세계 업데이트 방법에서 비롯된 것 같습니다.
나는 점프 액션을 다른 방법으로 구현했기 때문에 월드 스 텝 메소드 후에 점프 ([플레이어 점프]) 만하고 EXC_BAD_ACCESS를 얻지 못했습니다.

누구나 이미 이런 종류의 문제가 있습니까?
본문이 잠겨 있기 때문에 콜백 중에 본문을 제거 할 수 없다는 것이 "문제"와 매우 비슷하다고 생각합니다. 여기서 문제는 세계가 업데이트 될 때 나는 바로 뛰어 오른다는 것입니다. 버그는 재현하기가 어렵습니다 (10 회 1 회).
내가 틀렸다고 말해줘.

답변

0

터치 처리 방식으로 [player jump]을 호출 중이며 앱이 멀티 스레드되지 않은 경우 Step 기능 실행 중에 ccTouchBegan을 호출 할 수 없습니다. EXC_BAD_ACCESS을 얻는 이유는 잘못된 포인터를 어딘가에 억세스하고 있기 때문입니다. player, body 또는 다른 어떤 것일 수도 있습니다.

+0

실제로 다른 것이 었습니다. 나는 터치 디스패처의 removeDelegate를 호출하지 않아서 점프 메서드가 내 게임 장면을 다시 시작한만큼 많은 시간이 걸리게했다. 그래서 점프는 더 이상 문제가되지 않는다. 그 중 델리게이트를 제거하지 않으면 dealloc 메서드가 호출되지 않았습니다. 그래서 나는 초기 점프 문제가 이것을 지적 해 준 것을 기쁘게 생각합니다. – florian

관련 문제