2012-12-17 6 views
0

이제 글을 작성합니다. cocos2d를 사용하여 대화식 전자 서적을 만듭니다. 프로그램이 실행될 때 초기 페이지로드시에만 표지 페이지 애니메이션이 고르지 않게됩니다. 이 애니메이션은 표지에 있으며 거대합니다. 우리는 13 개의 텍스쳐지도, 26 개의 이미지를 말하고 있습니다.첫 번째로드시 고르지 않음/슬로우 애니메이션 cocos2d

나는이 문제가 이미지를 미리로드 /로드하는 것에 기인 한 것으로 알고 있지만 애니메이션이 발생하기 전에 이미 모든 이미지를로드했습니다.

-(id) init { 
    if((self=[super init])) { 
       isTouchEnabled_=YES; 
    //Pg0 Animations 
    [[CCSpriteFrameCache sharedSpriteFrameCache]addSpriteFramesWithFile:@"CB0A0.plist"]; 
    [[CCSpriteFrameCache sharedSpriteFrameCache]addSpriteFramesWithFile:@"CB0A1.plist"]; 
    ...etc.}} 

이 책의 전체적인 구성은 다음과 같습니다. 장면, 메뉴 레이어를 만든 다음 메뉴 레이어는 다른 레이어/다른 페이지를 푸시하고 팝합니다.

표지 페이지가로드되면 (Pg0) 사용자가 그림을 터치하면 애니메이션이 실행됩니다. 그런 다음 사용자가 그림을 다시 터치하면 두 번째 애니메이션이 실행됩니다.

책의 모든 이미지가 메뉴 레이어에로드되므로 (페이지를 밀거나 팝하기 전에) 메뉴 레이어에 이미지가로드됩니다. 이 이미지를 장면이나 개별 페이지에로드하여 프로세스 속도를 높이려고했으나 시간에는 영향을주지 않습니다.

애니메이션 도우미를 통해 내 애니메이션을 실행하고 있는데,이 애니메이션 도우미는 나를 위해 이미지를 반복합니다.

도움이 될 것입니다. 필요한 경우 더 많은 코드 또는 프로젝트 정보를 공유하고 싶습니다.

+0

내가 뭘 잘못했는지 알았어! 두 개의 다른 텍스처 파일의 이미지를 사용하는 애니메이션이있는 경우 특정 텍스처를 미리로드하지 않은 경우 새 텍스처를로드 할 때 일시 중지됩니다. '[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile : @ "yourTexture.plist"];와 같은 코드 라인을 작성하면 텍스처 캐시가로드되지 않습니다. 애니메이션이있는 캐시의 특정 이미지를 호출하여 레이어에 추가해야합니다. 이를 위해 단순히 모든 애니메이션 텍스처의 스프라이트를 추가하여 보이지 않게 만들었습니다. –

답변

0

AppDelegate가 메모리 경고 방법을 구현하는지 확인하십시오. 그 방법이 무엇인지 확인하십시오.

기본적으로 cocos2d는 해당 메소드를 구현하고 모든 캐시를 제거합니다. 텍스처가 미리로드되는 동안 트리거되면, cocos2d는 메모리 경고가 수신되었지만 미리로드 된 텍스처가 아직 사용 중이 아니므로 미리로드 된 텍스처를 제거합니다. Cocos2d는 그것들을 "사용되지 않는"것으로 간주하고 메모리에서 제거합니다. 다음에 그 텍스쳐를 사용할 때 다시 디스크에서 불러 와야한다는 뜻입니다.

블로그 게시물 where I describe this issue, and ways to solve it을 작성했습니다. 가장 중요한 점은 TexturePacker를 가져 와서 텍스처 아트 레이어에 .pvr.ccz 만 사용하는 것입니다. 가능한 경우 텍스처 색상 깊이를 16 비트로 줄이십시오. 그리고 실제로 사용중인 메모리의 양과 메모리 양이 합리적인 한도 내인지 여부를 확인하려면 텍스처 메모리 사용을 덤프해야합니다. 지원할 수있는 메모리가 적은 오래된 장치 포함

+0

필자는 실제로 16 비트, 텍스처 패커, .pvr.ccz 등 대부분의 최적화에 대해 실제로 책을 읽었습니다.하지만 확실히 구현할 텍스처 압축에 대해서는 알지 못했지만 내가 블로그 게시물을 읽은 것은 지금까지의 모범 사례를 설명합니다. 내가 다른 것을 찾으면이 정보를 계속 업데이트 할 것입니다. 고맙습니다! –

1

같은 문제가 있습니다. cocos2d v0.9를 사용하면 애니메이션이 좋아 졌으므로 지연이 발생하지 않습니다. 지연은 cocos2d v2.0으로 마이그레이션 할 때 나타납니다.

cocos2d v0.9에서 캐시 (addSpriteFramesWithFile : (NSString *) plist)에 스프라이트를 추가하면 texture_dd (CCSpriteFrameCache.m : 238)도 생성되고 cocos2d v2.0에서는 textture2d가 생성되지 않고 텍스처가 생성됩니다 CCSpriteFrame을 처음 사용할 때. 나는 CCSpriteFrameCache.m에

[[CCTextureCache sharedTextureCache] addImage:textureFileName]; 

을 추가하여 수정 : 난 그냥적인 Cocos2D 3.1 아이폰에서이 문제가 발생 된 207 (2.0)

1

합니다. 캐시 된 스프라이트 시트를 가지고 있었지만 여전히로드 중 막혀있었습니다. 나는 또 다른 포스트에서 어딘가에 텍스쳐 자체를로드해야만 초기 래그를 제거 할 수 있다는 것을 발견했다. 이것은 내가 내 캐싱 스프라이트 방식에서 한 것입니다 :

[[CCSpriteFrameCache sharedSpriteFrameCache] addSpriteFramesWithFile:@"spritesheet.plist"]; 
CCTexture *temporaryLoadTexture = [CCTexture textureWithFile:@"spritesheet.png"]; 

그냥 모든 처음 애니메이션과 스프라이트 지연을 제거있어 더미 CCTexture 파일을로드하여. 희망이 도움이!

관련 문제