2012-09-23 3 views
0

n'tMy 게임 장면이 replaceScene을 사용하여 레벨 선택 장면에서 실행되고 레벨 번호가 전달됩니다. 게임 레이어가 plist에서 데이터를로드 한 다음 세계 공간에있는 객체 (box2d 본문이있는 CCSprite 하위 클래스). 영웅 캐릭터는 레벨이 재생되는 동안 화면 가운데에 남아 있습니다. 레이어의 위치를 ​​조정하여 레이어 스케일과 함께 이동 속도에 따라 확대 및 축소합니다. 예를 들어Cocos2d 게임 레이어가 실행 중일 때 부드럽게 대체됩니다. 동일한 장면으로 대체합니다.

:

CGPoint layerPosition = ccp(((screenSize.width/2) - ourHero.position.x) * sceneScale, ((screenSize.height/2) - ourHero.position.y) * sceneScale); 
[self setPosition:layerPosition]; 
[self setScale:sceneScale]; 

문제는, 레벨 속도 증가와 계층이 축소되면 움직임이 종종 육포 할 수 있습니다 실행 처음 (단지 시작에 몇 초 동안). 그러나 사용자가 레벨을 다시 시작하면 (버튼이 replaceScene을 실행) 대체 레벨의 이동은 속도에서도 완벽하게 매끄 럽습니다.

나는 batchnode를 사용하고 있으며 스프라이트 이미지를 프레임 캐시에 저장했습니다. 나는 프레임 캐시를 설정하고 레벨 선택 장면에서 사운드를 프리로드하려고 시도했지만 어떤 차이점도 없습니다. 이벤트를 다시 시작한 수준을 동일한 동작으로 표시 할 수 있는지 확인하기 위해 수준간에 캐시를 제거하려고 시도했지만 아무 것도하지 않았습니다.

아무도이 문제의 원인을 제시하고이를 제거 할 수있는 방법을 제안 할 수 있습니까?

감사합니다.

+0

물론 처음으로 게임 장면을로드하면 모든 개체가 만들어지기 때문에 게임 장면이 느려질 것입니다. 반면에 두 번째로는 몇 가지 사항 만 만들어야합니다. 어쨌든 내가 권장하는 것은 Time Profiler를 사용하고 지연을 일으키는 것이 무엇인지 확인하는 것입니다. 그것의 소리에서 당신은 모든 것을 올바른 방법으로하고 있습니다. 그래서 Instruments가 말하는 것을하도록하십시오. –

+0

답장을 보내 주셔서 감사합니다. CCNode Vist (CCSpriteBatchNode 방문시 44 %), EAGLView swapBuffers 29 %, CCScheduler tick 1.9 %에 58 %를 지출합니다. – TinoK

+0

이상한 점은 레벨의 첫 번째 플레이에서 육중 한 움직임이 지속된다는 것입니다. 분명히 모든 물체가 어느 시점에 만들어 졌을 것이므로 불안감이 가라 앉을 것입니다. 모든 피드백에 대해 다시 한 번 감사드립니다 !! – TinoK

답변

0

추적 할 수없는 가망 솔루션 :

로드 초기화/onEnter에있는 모든 질감과 스프라이트 시트. 한 번에 모든 것을로드 할 수 없다면 스레드로드를 사용하십시오. 오디오/음악의 경우, 사운드 엔진에서 preLoad 호출을 사용할 수 있습니다.

Here s my thread. 나도 똑같은 문제에 직면했다. 마지막으로로드를 위해 별도의 스레드를 사용하여 해결되었습니다.

+1

제안 된 솔루션을 이용해 주셔서 감사합니다. 당신이 관찰 한 행동이 레벨의 전체 실행 동안 (무기한으로) 계속 되었습니까, 아니면 비동기로드가 완료된 후에 멈 춥니 까? 모든 텍스처와 오디오를 미리로드하고 있기 때문에 물어 봅니다. (레벨 초기화) - 레이어 장면이 처음 실행될 때 여전히 불규칙합니다. – TinoK

+0

runAction이있는 cocos2D 애니메이션은 처음에는 시간이 이상적입니다. 그럴 경우 확인하십시오. init 자체에서 모든 cocos2D 액션을 초기화하고 runAction 호출로 한 번 (화면 외부에있을 수 있음) 시도하십시오. 게임 중 하나에서 나는 또한 처음으로 애니메이션에서만 삐걱 거리며 ... 그 애니메이션 초기화를 init로 옮겼습니다. init에서 한 번 플레이 한 다음 중지하십시오. – Guru