2010-06-03 6 views
1

J'ai essayé de stocker des CCSprites dans un NSMutableArray, mais le jeu s'est bloqué immédiatement, je suppose qu'il s'agit d'un problème de mémoire, et je suppose également que CCSprites sont des objets autorelease? Alors, comment stocker plusieurs CCSprites dans un NSMutableArray? Le but que je veux faire est de stocker par exemple tous les ennemis dans un tableau, puis de les parcourir dans ma fonction time-step et de mettre à jour leurs positions et autres joyeusetés.Cocos2D - NSMutableArray de CCSprites

Ce que j'ai essayé de faire:

NSMutableArray *enemies = [NSMutableArray array]; 
[enemies addObject: [CCSprite spriteWithFile: @"hello.png"]]; 

Il se bloque lorsque je tente d'atteindre le sprite en utilisant -objectAtIndex:

+2

Publier un exemple de code qui présente le problème.En outre, il n'y a rien de tel que un «objet autorelease.» Si un objet est auto-libéré ou non dépend du code qui l'a utilisé – Chuck

+0

J'ai ajouté ce que j'ai essayé de faire –

+1

Où avez-vous accès au tableau? rouge dans un ivar? Est-ce qu'il est retenu quelque part? –

Répondre

5

Le tableau est autoreleased. Si vous essayez d'y accéder plus tard dans un autre contexte, il est probablement déjà mort. Donc, soit vous le conservez, soit vous n'utilisez pas la méthode du tableau de commodité, mais [[NSMutableArray alloc] init] explicitement.

Ou stocker dans une propriété retenue (assurez-vous d'utiliser la méthode setter dans ce cas, à savoir self.ivar = enemies;

Quelle que soit la façon dont vous allez, soyez prudent de ne pas « trop conserver » votre tableau, à savoir l'aide alloc/init et le setter retenant, ou votre tableau ne sera jamais libéré à nouveau (plus correctement, il ne sera libéré avec une version double "buggy")

+0

J'ai rencontré le même problème et cette solution fonctionne! –