0

我为我的 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)。

如果我真的从外部添加精灵,它可以工作并显示精灵:

BuildTowerMenu *menu = [BuildTowerMenu menuAtLocation:tileScreenPos];

CCSprite *item1 = [CCSprite spriteWithFile:@"Icon.png"];
item1.position = location;
[menu addChild:item1];

[self addChild:menu];

关于我在这里做错了什么的任何提示?

PS:我在CCSprite的dealloc中添加了一个断点,它永远不会被调用(我想如果ARC正在释放它应该调用它)......

4

2 回答 2

0

正如对最初问题的评论_:好的,它与 ARC 无关;似乎已发布的 Sprite 在那里,它只是一个调试器 - 没有正确显示它的错误。问题实际上是行 self.position = location; 在 addChild 之后移动 setposition 后,一切正常。

于 2013-05-10T10:06:47.563 回答
0

我认为问题在于您为菜单和精灵设置了相同的位置。我的意思是这部分代码

CGPoint location = ccp(200.f, 200.f);
[menu setPosition: location];
[sprite setPosition: location];
[menu addChild: sprite];

将添加您的精灵与位置位置(400.f,400.f),相对于菜单的父级。你在 BuildTowerMenu 的initMenuAt:方法中做几乎同样的事情/

于 2013-04-15T12:16:19.267 回答