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;
}

しかし、なぜかスプライトが現れません。少しデバッグした後、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

問題は、メニューとスプライトに同じ位置を設定することだと思います。つまり、コードのこの部分

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 に答える