加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

cocos2d-iphone – 如何将CCSprite从一个父级转移到另一个父级?

发布时间:2020-12-14 18:56:25 所属栏目:百科 来源:网络整理
导读:我有一个名为sprite的CCSprite,它是一个名为movingLayer的CCLayer的子代,它本身就是运行我的游戏逻辑的当前CCLayer的子代,所以在这种情况下它是自我的. movingLayer在屏幕上来回移动,重复永远的动作,精灵正在它上面骑行.我想让精灵“走出”movingLayer并“继
我有一个名为sprite的CCSprite,它是一个名为movingLayer的CCLayer的子代,它本身就是运行我的游戏逻辑的当前CCLayer的子代,所以在这种情况下它是自我的. movingLayer在屏幕上来回移动,重复永远的动作,精灵正在它上面骑行.我想让精灵“走出”movingLayer并“继续”自我,在那里它可以自己做一些动作.

当我尝试这样做时,我需要告诉movingLayer删除sprite和self来添加精灵.这就是我做的……

- (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是多余的,但这不是问题.如果我在moveLayer中删除sprite,然后将其添加到self我崩溃以访问僵尸,如果我尝试将其添加到自己的第一个,我崩溃尝试添加已经添加的东西.

解决方法

你有没有尝试过清理NO?

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

[sprite retain];
[movingLayer removeChild:sprite cleanup:YES];
[self addChild:sprite z:1];
[sprite release];

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读