cocos2d中的值在函数之间删除

时间:2011-07-17 08:22:32

标签: objective-c xcode cocos2d-iphone

这个主题类似于另一个我写的但是是不同的。 奇怪的事情最近发生在我身上的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函数,它就消失了!

2 个答案:

答案 0 :(得分:2)

retainbasic_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文档说明,这就是你如何做到的。