2014-09-10 4 views
0

미리로드 된 장면 B를 이와 같이 장면 A에 푸시합니다. 장면 B의 루트 노드는 ~ 2 초 동안 실행되는 애니메이션을 가지고 있으며, 애니메이션이 완료되면 장면 B가 팝업되도록합니다. 나는 그것이 아래처럼 작동해야한다고 생각합니다. 그러나 popScene에서 충돌합니다. 푸시/팝이 Cocos2D v3에서 실제로 작동합니까?Cocos2D v3.x에서 장면을 올바르게 푸시하고 터뜨리는 방법

SceneRedroom* sceneredroom = (SceneRedroom*)[self.ccscenewithSceneredroom getChildByName:@"SceneRedroom" recursively:NO]; 
[sceneredroom.animationManager setCompletedAnimationCallbackBlock:^(id sender) { 
     [[CCDirector sharedDirector] popScene]; 
}]; 

[[CCDirector sharedDirector] pushScene:self.ccscenewithSceneredroom]; 

나는 충돌이 상당히 무작위이다. 장면을 밀거나 터뜨릴 때 일부 항목이 잘못 할당 해제되거나 비슷해 보이는 것 같습니다.

+0

크래시 메시지 (로그의 마지막 줄)를 게시하는 경우 스택 및 문제 코드를 호출하십시오. 예외 중단 점을 추가하십시오. – LearnCocos2D

+0

크래시가 너무 무작위 였기 때문에 크래시 메시지가 발생했지만 일반적으로 메시지가 잘못된 개체로 잘못 전달되었습니다. 따라서 일부 이유 때문에 일부 할당 해제가 일찍 일어나는 것으로 의심됩니다. 어쨌든 일부를 만들 시간이 없습니다. 테스트 케이스를 만들고 다른 장면을 사용하여 컷씬을 표시하지 않도록 되돌려 놓았습니다. 기존의 장면 계층에 다른 CCNode를 추가하기 만하면됩니다. – Jonny

+0

AnimationCallback에서'popScene()'을 호출하지 말고 대신에'popScene()'을 호출하십시오. –

답변

0

추가 연구를 통해이 게시물을 통해 내가 겪고있는 문제에 대한 해결책을 찾을 수있었습니다. 나는 CCDirector 일시 정지를 제거하고 내 pauseGame 및 resumeGame 방법에서 다시는이 추가 :이 애니메이션을 중지하고 게임이 후 재개 닫힌 상태 경우에도 "일시 중지"를 유지하고 심지어 필요하지 않았다

//pause 
[sprite.actionManager pauseTarget:sprite]; 

//resume 
[sprite.actionManager resumeTarget:sprite]; 

AppDelegate 클래스로 게임하기 :). 나는 이것이 다른 사람들에게도 도움이되기를 바랍니다.

업데이트 :

[sprite.actionManager pauseAllRunningActions]; 
[sprite.actionManager resumeTargets:[NSSet setWithArray:spriteArray]]; 

메모를 두 (resumeTarget와 resumeTargets의 차이를 : 그냥 경우 사람이 다른 루프를 사용하여 스프라이트를 만드는에서, 여기에 내가 그것을 위해 기능을 일시 정지를 생성하고 다시 시작하는 관리 방법) resumeTargets가 NSSet을 요청할 것이기 때문에 위의 코드를 사용하여 배열 객체를 NSSet으로 전달했습니다.

관련 문제