这是我的 '滴答' 功能:取消分配的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