我有一个名为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];
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。