2012-10-11 3 views
0

Je travaille sur un jeu et je veux créer des miniatures de chaque niveau afin que je puisse les utiliser dans un menu. Je le fais avec CCRenderTexture comme ceci:CCRenderTexture saveToFile prend une grande quantité de mémoire

CCRenderTexture *renderer = [CCRenderTexture renderTextureWithWidth:bounds.size.width height:bounds.size.height]; 
ScreenShotLayer *scene = [[ScreenShotLayer alloc] init]; 
[renderer begin]; 
[scene visit]; 
[renderer end]; 

[renderer saveToFile:[NSString stringWithFormat:@"level%@.png", level.levelId] format: kCCImageFormatPNG]; 

Tout cela fonctionne bien et mon image est enregistrée, mais il faut une énorme quantité de mémoire et ne le libère. Sans sauvegarder ces données, mon jeu prend 8 Mo de RAM. Lorsque je sauvegarde l'image, il faut plus de 430 Mo.

Si je laisse tout pareil et que je commente simplement l'appel saveToFile, je suis revenu à mes 8 Mo d'utilisation de la mémoire. J'ai debugged ceci avec l'outil de fuites et il ne trouve aucune fuite.

Est-ce un problème de cadre? Y a-t-il une meilleure façon de gérer cela? Est-ce que je fais quelque chose de stupide?

Mon jeu est entièrement open source et vous pouvez l'obtenir au https://github.com/zgrossbart/bridges. Ce code se passe dans LevelMgr.mm.

Merci pour l'aide,

Zack

+0

Avez-vous testé cela sur un appareil actuel? – LearnCocos2D

+0

Oui, j'ai. Je vois ce même comportement lors des tests sur un vrai iPhone 4s ou mon iPad 3. –

Répondre

0

Je trouve une solution à ce problème sur le forum Cocos2d et avec un peu de fouiner dans le code. Vous pouvez lire le forum son poste:

http://www.cocos2d-iphone.org/forum/topic/48890

Je vois encore CCRenderTexture fuite un peu de mémoire. L'équipe de Cocos2d a testé cela et dit qu'il fonctionne en 2.1-beta. Il y a aussi une grande amélioration de performance que j'aurais pu apporter à mon code. J'utilisais CCRenderTexture pour créer une image miniature d'une scène Cocos2d. Je l'ai fait en utilisant CCRenderTexture pour créer une image en taille réelle, puis en utilisant un UIImage spécial pour redimensionner et recadrer l'image. Il est beaucoup plus efficace de créer une CCRenderTexture de la taille que je veux à la fin et de redimensionner ma scène Cocos2d à la taille que je veux à la fin.

Questions connexes