我为我的cocos2d项目启用了ARC。
现在我尝试执行以下操作:
BuildTowerMenu *menu = [BuildTowerMenu menuAtLocation:tileScreenPos];
[self addChild:menu];
在BuildTowerMenu类中:
+(id)menuAtLocation:(CGPoint)location {
return [[self alloc] initMenuAt:location];
}
-(id) initMenuAt:(CGPoint)location {
if (self = [super init]) {
self.position = location;
CCSprite *item1 = [CCSprite spriteWithFile:@"Icon.png"];
item1.position = location;
[self addChild:item1];
}
return self;
}
但出于某种原因,Sprite从未出现过。经过一些调试后,我看到当我从menuAtLocation返回时,CCSprite仍然在BuildTowerMenu的子数组中,但是为空(只有一个id)。
如果我实际上从外部添加了精灵,它就会起作用并显示Sprite:
BuildTowerMenu *menu = [BuildTowerMenu menuAtLocation:tileScreenPos];
CCSprite *item1 = [CCSprite spriteWithFile:@"Icon.png"];
item1.position = location;
[menu addChild:item1];
[self addChild:menu];
我在这里做错了什么提示?
P.S。:我在CCSprite的dealloc中添加了一个断点,它永远不会被调用(我想如果ARC发布它就应该调用它)...
答案 0 :(得分:0)
我认为问题在于你为菜单和精灵设置了相同的位置。 我的意思是代码的这一部分
CGPoint location = ccp(200.f, 200.f);
[menu setPosition: location];
[sprite setPosition: location];
[menu addChild: sprite];
将添加您的精灵位置位置(400.f,400.f),重新连接到菜单的父级。你在BuildTowerMenu的initMenuAt:
方法/
答案 1 :(得分:0)
已经对最初的问题发表了评论_: 好的,它与ARC无关;似乎被释放的Sprite就在那里,它只是一个调试器 - 没有正确显示它的bug。问题实际上是行self.position = location;在addChild之后移动setposition后,一切正常。