我有一个CCSprite
被调用sprite
,它是被CCLayer
调用的子级movingLayer
,它本身就是当前CCLayer
运行我的游戏逻辑的子级,所以self
在这种情况下。 movingLayer
在屏幕上来回移动,以一种永远重复的动作,并sprite
沿着它骑行。我想sprite
“下车”movingLayer
和“上车”到self
它可以自己做一些动作的地方。
当我尝试这样做时,我需要告诉movingLayer
删除sprite
和self
添加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
,我会因为尝试添加已经添加的东西而崩溃。