4

我有一个CCSprite被调用sprite,它是被CCLayer调用的子级movingLayer,它本身就是当前CCLayer运行我的游戏逻辑的子级,所以self在这种情况下。 movingLayer在屏幕上来回移动,以一种永远重复的动作,并sprite沿着它骑行。我想sprite“下车”movingLayer和“上车”到self它可以自己做一些动作的地方。

当我尝试这样做时,我需要告诉movingLayer删除spriteself添加sprite. 这就是我所做的......

- (void)attack:(id)sender
{
    [sprite stopAllActions];
    [movingLayer removeChild:sprite cleanup:YES];
    [self addChild:sprite z:1];
    CGFloat distance = ccpDistance(sprite.position, ccp(sprite.position.x, -sprite.contentSize.height/2));
    id goDown = [CCMoveTo actionWithDuration:distance/moveDuration position:ccp(sprite.position.x, -sprite.contentSize.height/2)];
    id repeatDown = [CCRepeatForever actionWithAction:[CCSequence actions:[CCMoveTo actionWithDuration:0 position:ccp(sprite.position.x, sprite.contentSize.height/2+self.contentSize.height)], [CCMoveTo actionWithDuration:moveDuration position:ccp(sprite.position.x, -sprite.contentSize.height/2)], nil]];
    id attackAction = [CCSequence actions:goDown, repeatDown, nil];
    [sprite runAction:attackAction];
}

我认为stopAllActions是多余的,但这不是问题。sprite如果我在movingLayer添加之前删除它,我会self因为访问僵尸而崩溃,如果我尝试先添加它self,我会因为尝试添加已经添加的东西而崩溃。

4

1 回答 1

9

您是否尝试将清理设置为 NO?

或者,在将 sprite 从movingLayer 中删除之前尝试保留它,然后在完成后释放它:

[sprite retain];
[movingLayer removeChild:sprite cleanup:YES];
[self addChild:sprite z:1];
[sprite release];
于 2011-08-16T22:25:04.213 回答