我正处于 iphone 游戏的初始构建阶段,我正在使用精灵表来创建一些随机的人,每个人都有头发、衣服等的子精灵。
我使用 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 中的 spritesheets 的内容,并且了解到删除单个 sprite 是很棘手的,所以我确信我需要在这里添加一些重要的行。谢谢你的帮助!
编辑: 我用谷歌搜索了错误并找到了这个线程: http: //www.cocos2d-iphone.org/forum/topic/17170这似乎证实了 Cocos2d 认为我没有将精灵添加到精灵表中 - 但我是,正如精灵第一次正确添加的事实所证明的那样,而不是第二次。
一种解决方案是完全避免删除精灵,只是让它们不可见,并在需要重用时用新特性重新绘制它们。我宁愿知道真正的解决方案是什么,因为它看起来更干净。