所以我有一个CCSprite对象的子类,在其init方法中,我调用:
[self scheduleUpdate]
我稍后会从其父CCNode中释放此对象,如下所示:
[self removeChild:sprite cleanup:YES];
另外,我在sprite的dealloc方法中调用[self unscheduleUpdate]。
然而,我得到了一个糟糕的内存访问,所以看起来在对象发布后仍然尝试更新方法(我把它缩小到这个,因为如果我注释掉[self]它会很好地工作scheduleUpdate] line。
有什么想法吗?
答案 0 :(得分:1)
发现这篇文章试图提出同样的问题。我尝试了unchedule update(在我的init方法中)没有运气,但后来意识到通过移动[self unscheduleUpdate];基于它工作的条件实际更新方法(连续运行,与init方法不同)!
因此,对于那些寻找复制粘贴的人来说,这是我从http://www.ccsprite.com/cocos2d/using-ccprogresstimer-cocos2d-example.html#HCB_comment_box实现的进度条示例
-(id) init
{
//initialize progress bar, make sure to add a file named green_health_bar.png to your
//resource folder
timer = [CCProgressTimer progressWithFile:@"green_health_bar.png"];
//set the progress bar type to horizontal from left to right
timer.type = kCCProgressTimerTypeHorizontalBarRL;
//initialize the progress bar to zero
timer.percentage = 0;
//add the CCProgressTimer to our layer and set its position
[self addChild:timer z:1 tag:20];
[timer setPosition:ccp(100, 280)];
[self scheduleUpdate];
}
并在您的更新方法中:
-(void)update:(ccTime)dt
{
//get progress bar
CCNode* node = [self getChildByTag:20];
timer.percentage += dt * 10;
if (timer.percentage >= 100)
{
[self gameOver]; //used to stop parallax and show gameover menu
[self unscheduleUpdate];
}
}
我通常不允许论坛回复电子邮件,但可以随意通过@ russ152提问!
答案 1 :(得分:0)
嗯..尽量不要使用scheduleUpdate?我试过寻找self unscheduleUpdate但是在CCNode中没有这样的功能..你可以尝试[self unscheduleAllselectors],它会停止对象的所有选择器,包括更新选择器,如果你不再使用该对象..或者使用自定义选择器..