Я на начальных этапах создания игры для iphone, и я использую спрайт-листы для создания случайных людей, у каждого из которых есть подспрайты для волос, одежды и т. Д.
Яхранение моих изображений спрайтов в spritesheets, используя CCSpriteBatchNode.Сейчас я просто делаю тест начальной настройки, когда вы нажимаете на экран, чтобы создать новый случайный набор людей.Странно то, что вы можете нажать один раз, и он удалит старых людей и заменит их новыми, но во второй раз происходит сбой с ошибкой: «CCSpriteBatchNode не содержит спрайт. Не могу удалить его»Теперь я уверен, что я добавил спрайт в узел пакета, в моем конструкторе Person.m у меня есть эта строка:
[spriteSheet addChild:person];
В моем тестовом коде в ccTouchesEnded я получил следующий код:
//updated with changes suggested by Mazyod and Jer
for(int i=6; i>=0; i--){
Person *per = [_people objectAtIndex:i];
[_people fastRemoveObjectAtIndex:i];
[_spritesheet removeChild:per cleanup:YES];
per = nil;
}
for(int i = 0; i < 7; i++){
Person *per = nil;
per = [Citizen personFromCountry:_country1 WithSpriteSheet:_spritesheet];
per.position = ccp(100 + (50 * i),160);
[_people addObject:per];
[_spritesheet addChild:per];
}
Кто-нибудь может подсказать, что мне не хватает?Я прочитал кучу спрайтов в cocos2d, и мне дано понять, что удаление отдельных спрайтов довольно сложно, поэтому я уверен, что есть некоторые важные строки, которые мне нужно добавить здесь.Спасибо за вашу помощь!
Редактировать: Я погуглил ошибку и нашел эту тему: http://www.cocos2d -iphone.org / forum / topic / 17170 , которая кажетсяподтвердите, что Cocos2d считает, что я не добавляю спрайт в таблицу спрайтов - но я, как доказывает тот факт, что спрайты добавляются правильно в первый раз, а не во второй.
Одно из решений - просто избежатьудаление спрайтов вообще, просто сделайте их невидимыми и перерисуйте их с новыми характеристиками, когда они должны быть повторно использованы.Я предпочел бы знать, каково настоящее решение, потому что оно кажется чище.