2012-12-19 2 views
2

이 질문에 대한 답변이 많이 있습니다. 그러나 그들 모두는 입니다.!Cocos2d. 이미지를 올바르게로드하고 저장 하시겠습니까?

예를 들어 하나의 CCSprite 객체로 CCLayer 객체를 만든 경우입니다. 텍스처가 3 개가있어서 터치 할 때마다 전환하고 싶습니다.

예를 들어 나는이 비슷한 것을 사용합니다 :

link

나는 시뮬레이터에서이 응용 프로그램을 실행합니다. 그런 다음 저는 메모리 경고를합니다. 그런 다음 이미지 (텍스처)를 전환하려고합니다. 그리고 3 개의 이미지 중 2 개가 삭제된다는 것을 알았습니다 (메모리 경고가 나타나는 동시에 이미지가 표시됨).

CCSprite 및 ССTexture2D에 대해 retain/release 명령을 사용하려고했지만 릴리즈 된 객체의 dealloc 메서드가 호출되지 않을 때 상황이 발생합니다.

올바르게 저장하는 방법은 무엇입니까? 메모리에 경고를 저장하고 현재 레이어가 삭제 될 때 해제/제거하려고합니다.

답변

3

Texture Packer로 만든 하나의 텍스처 아틀라스에 저장합니다. 그런 다음 [Sprite setDisplayFrame : frameName]을 호출하여 표시된 텍스처를 전환하는 것처럼 간단합니다.

2

기본적으로 메모리 경고 cocos2d는 사용되지 않는 텍스처를 제거합니다. 메모리 경고의 요점은 OS가 앱에 "이봐, 그건 괜찮지 않아, 네 식욕을 줄이거 나 내가 너를 닥칠거야"라고 말하고, 앱은 "죄송합니다, 지금 메모리를 확보하고"있어야합니다.

+1

그들은 사용되지 않습니다! 그리고 제거 할 텍스처를 선택하고 싶습니다. 그들 모두는 아닙니다. iOS가 보이는 rect 밖의 모든 그래픽 객체를 제거합니까? 못. didReceiveMeroryWarning에 무언가를 쓸 수 있습니다. – Gargo

2

텍스처를 미리로드 할 때 메모리 경고가 표시되면 사용되지 않는 텍스처를 제거하는 cocos2d의 기본 동작이 사용자를 발로 쏠 것입니다. More about this issue here.

제 조언 : AppDelegate의 메모리 경고 메소드에서 purge cocos2d의 캐시에 대한 호출을 제거하십시오. 물론 메모리 사용에 특히주의해야합니다. 또는 이미지를 미리로드하는 동안 단순히 비헤이비어를 비활성화 할 수도 있지만 나중에 문제를 간단히 옮길 수 있습니다.

+1

텍스처를 사용하는 대신 [CCSprite spriteWithFile : ...]을 호출하는 것이 더 좋을까요? – Gargo