这个主题类似于另一个我写的但是是不同的。 奇怪的事情最近发生在我身上的cocos,事情刚刚被删除。
我在cocos2d类中有一个NSString值,在动画函数中不是nil。 但是当动画完成后,她调用另一个函数,它在该函数中变为null。
-(void)animation
{
// animation loops .....
//......
CCAnimate *Action = [CCAnimate actionWithAnimation:dollAnimation];
//calling finish animation here :
id call=[CCCallFunc actionWithTarget:self selector:@selector(finishAnimation)];
id sequence=[CCSequence actions:Action,[CCHide action],call,nil];
[dollSprite runAction:sequence];
basic_pic=[rowInDataBase objectAtIndex:1] ;
NSLog(@"%@",basic_pic);
// here basic_pic has a good value!
}
//when animation is done(3sec) it calls this :
-(void)finishAnimation
{
NSLog(@"%@",basic_pic); // null ! ! !
NSLog(@"%@",rowInDataBase); // null ! ! !
}
怎么会发生这种情况? basic_pic是NSString,现在没有属性。 我不得不说basic_pic在动画之前得到他的值frin数组一个函数,并且当调用动画时,它仍然存在,但是接下来调用finish函数,它就消失了!
答案 0 :(得分:2)
您retain
和basic_pic
rowInDataBase
了吗?如果没有,它们可能是当前UIKit事件完成时释放的自动释放对象。
答案 1 :(得分:0)
解决。
如果你想在cocos2d中替换sprite图片,你最好这样做:
CCTexture2D *texmex = [[CCTexture2D alloc] initWithImage:[UIImage imageNamed:basic_pic]];
[b_pic setTexture: texmex];
[texmex release];
而不是那样:
b_pic=[CCSprite spriteWithFile:basic_pic];
b_pic.position=ccp(160,175);
[self addChild:b_pic];
因为它因内存泄漏而崩溃。 这对我来说很有用,根据cocos文档说明,这就是你如何做到的。