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