2014-10-11 2 views
-1

고맙습니다. 문제가 있습니다. 어떻게 cocos2dx에서 메모리를 해제합니까? 제 게임에서 첫 장면은 많은 장면을 촬영할 수 있기 때문에 많은 장면을 촬영할 수 있습니다. 너무 많은 애니메이션이 있으므로이 장면에 만족하지만 다음 장면으로 넘어갈 때마다 이전에 사용 된 메모리를 해제하지 마십시오. 이것이 내 문제입니다. 그래서 장면을 바꿀 때 이전 장면에서 사용한 메모리를 어떻게 풀려고합니까?cocos2dx의 메모리 문제

답변

0

장면간에 이동하려면 pushScene 또는 replaceScene을 호출 할 수 있습니다.

푸시 장면

당신이 장면 사이에 밀고하는 경우

는 당신이 사이에 로딩 장면을 가지고하는 것이 좋습니다. 가볍기 때문에 이전 장면에서 모든 것을 해제 할 수 있습니다. 이것은 onEnter(DidFinish)onExit(DidStart) 방법이 유용 할 수있는 곳입니다.

호출 체인은 다음과 같습니다

  1. oldScene->onExitDidStart()
  2. loadScene->onEnter()
  3. oldScene->onExit() < - 당신이 모든을
  4. loadScene->onEnterDidFinish() < 해제 곳입니다 - 당신이 새로운로드 곳입니다 장면
  5. newScene->onEnter()

등등 ... 기억을 올바르게 관리했다면 한 번에 두 개의 무거운 장면이 없어야합니다.

장면

를 교체 이것은 훨씬 쉽게 시나리오입니다. 새로운 장면은 이전 장면이 완전히 사라질 때까지 가능한 한 적게로드해야합니다. 나는. onEnterDidFinish()이 호출되거나, 심지어 1 프레임 후에 호출됩니다.

0

Cocos2d-x는 자동 해제 메모리을 지원합니다. 예를 들어, Sprite :: create()를 호출하여 스프라이트를 생성하면 자동 스프레드 시트에이 스프라이트가 추가됩니다. 이 스프라이트를 추가하지 않으면 현재 장면의 자식 (또는 n 번째 수평으로 정렬 된 자식)이됩니다.
을 사용하여 객체를 만들지 말고, 다음 장면을 호출 할 때 create()를 사용하면 마지막 장면의 모든 장면이 해제됩니다.