我有一个场景,一个主图层和一个子图层,主图层包含一个Player *对象,它是CCSprite的子类,我想将Player传递给子图层,如下所示:
BattleLayer* b = [[BattleLayer alloc] initWithPlayer:_player];
[((CCScene*)self.parent) addChild:b];
-(id)initWithPlayer:(Player *)p
{
if((self=[super init]))
{
_player = p;
[self addChild:_player.spriteSheet];
}
return self;
}
但是,当我执行[self addChild:_player.spriteSheet]时,这会出错;
*** Assertion failure in -[BattleLayer addChild:z:tag:]
我尝试在传入之前从主图层中删除精灵,但即使进行了清理:否则会出现错误
*** -[CCSpriteBatchNode tag]: message sent to deallocated instance 0x747a580
我在这里做错了什么?什么是实现这一目标的最佳方式?
答案 0 :(得分:2)
我可以看到导致addSprite断言失败的三件事之一。
答案 1 :(得分:1)
我之前遇到过这种情况并保留,然后在重新排序后发布。我的对象是自动释放的,仅由CCLayer保留,所以这有效,试试:
[_player retain];
[_player removeFromParentAndCleanUp:YES];
[self addChild:_player];
[_player release];
但是我遇到了一个快速删除和重新添加精灵的错误,这里有描述:http://www.cocos2d-iphone.org/forum/topic/9980