這是我的 '滴答' 功能:取消分配的NSMutableArray對象
- (void) tick: (ccTime) dt
{
NSLog(@"%d",ticker);
if(fbut.Adown == YES && ticker > 4)//fbut is a button
{
elayer = [[effectsLayer alloc] init]; // each effectlayer draws a //projectile that moves forward 'x' ticks
elayer.e_playpos = glayer.playerpos; // player position
[self addChild:elayer z:2];
[mutable addObject: elayer];
[elayer release];
if(mutable.count > 20) // when there are 20 projectiles drawn, start //destroying the last one.
{
NSLog(@"mutable: %d", mutable.count);
[mutable removeLastObject];
}
ticker=0;
}
ticker++;
// . . .
這是正在運行的程序是什麼樣子
http://screencast.com/t/LpNHL2kJIVpu
看起來像20多..
有趣事情是,該陣列是穩定在20個對象。所以如果對象被「移除」(通過[mutable removeLastObject];)他們怎麼會出現在屏幕上?
這裏的下一個泡菜...
現在我改變的init保留(尋找的*****)
- (void) tick: (ccTime) dt
{
NSLog(@"%d",ticker);
if(fbut.Adown == YES && ticker > 4)//fbut is a button
{
elayer = [[effectsLayer alloc] retain]; // *********each effectlayer draws //a projectile that moves forward 'x' ticks
elayer.e_playpos = glayer.playerpos; // player position
[self addChild:elayer z:2];
[mutable addObject: elayer];
[elayer release];
if(mutable.count > 20) // when there are 20 projectiles drawn, start //destroying the last one.
{
NSLog(@"mutable: %d", mutable.count);
[mutable removeLastObject];
}
ticker=0;
}
ticker++;
// . . .
現在沒有效果層正在制定,但NSArray仍然擁有21-20個對象。所有這些對象都是未初始化的。所以我添加初始化到最後: elayer = [[[effectsLayer的alloc]保留] INIT];
現在我已經從之前相同的效果。
,所以我嘗試自動釋放.. 同樣的效果,很多很多的皮尤皮尤皮尤的,這樣超過20
我的目標是隻有20 alowed同時要繪製,一旦20他們被解除分配。眼下,隨着釋放出來,該程序運行正常,直到大約4分鐘時,大約有2000ê層在與FPS是大約5 ..
爲什麼不該船座位座位吧?
(BTW讀音字使用cocos2d的框架),這是由我受版權保護的一個項目,亞歷克斯·厄雷2009年
即使'addChild:z:'不保留對象,但確實保留了引用,這意味着您仍然將該圖層添加爲子對象,但它有一天會崩潰,因爲它已被'dealloc'編輯。 – Chuck 2009-09-03 17:41:57
@Chuck +1非常真實。 – 2009-09-03 17:43:15
此外,如果你不保持它「的addChild:」你會不會限制在20個項目,你只可能崩潰。 – bobDevil 2009-09-03 17:46:52