Pergunta

Eu estou fazendo um jogo de iPhone usando cocos2d que envolve um enorme conjunto de animações de personagens (atleast 25 diferente deles) .. para o qual eu estou tendo um monte de spritesheets cada pesando cerca de 100KB a 200KB .. E eu usei para criar os AtlasSpriteManagers para estes on-demand. Mas quando eu testei isso no dispositivo, houve lotsa soluços de desempenho em torno destas animações .. havia quadros perdidos .. jogo de suspensão, enquanto as imagens onde o carregamento e todos ..

Então, eu decidi criar um pré-carregamento e técnica de caching em que eu sempre olhar para frente e criar as possíveis AtlasSpriteManagers I pode precisar e mantê-los em um NSMutableDictionary e levá-la de lá durante a animação .. e com base numa usageCount variável, vou retirá-los fora este dicionário mais tarde e memória livre .. e eu uso o método performSelectorInBackground chamar esta função 'loadASM' que faz isso criação de AtlasSpriteManager e armazená-la no dicionário.

[self performSelectorInBackground:@selector(loadASM:) withObject:fileName];

-(ASMHolder *)loadASM:(NSString *)fileName
{
AtlasSpriteManager *sprMgr = [AtlasSpriteManager spriteManagerWithFile:fileName capacity:40];
ASMHolder *asmHolder = [[ASMHolder alloc] init];
asmHolder.sprMgr = sprMgr; asmHolder.retainCount++;
[asmDict setObject:asmHolder forKey:fileName];

return asmHolder;
}

Mas as imagens não parecem carregar se eu chamar esse método em segundo plano usando performSelectorInBackground .. A aparece caixa de cor branca onde as imagens são supostamente para aparecer .. No entanto, o objeto AtlasSpriteManager é criado e é lá no dicionário .. mas é apenas transformar-sprites em branco .. E em vez da chamada fundo, se eu tentar chamar o método 'loadASM' diretamente (ou seja, [auto loadASM: fileName]), as imagens são loading .. mas é claro, há o atraso como este é chamado síncrono ..

Eu até tentei cache Texture2D objetos também, em vez dos AtlasSpriteManagers, mas o resultado é o mesmo ..

(eu também tentei addImageAsync de TextureManager .. mas isso não ajuda o meu propósito também .. como ele não dar o nome do arquivo é o carregamento em argumentos do método de retorno, sem a qual a chave do meu cache de dicionário não pode ser criado .. )

Por favor, ajuda ..

Graças Sankar

Foi útil?

Solução

que você precisa fazer coisas especiais para usar OpenGL de vários segmentos. Consulte esta questão .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top