これは私の「ティック」機能です:
- (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 個のオブジェクトが保持されています。これらのオブジェクトはすべて初期化されていません。だから私は最後にinitを追加しました: elayer = [[[effectsLayer alloc] keep] init];
今、私は以前と同じ効果があります。
だから私はautoreleaseを試してみます..同じ効果、たくさんのピューピューピュー、20をはるかに超える.
私の目標は、一度に 20 個だけを描画できるようにすることです。20 個が描画されると、割り当てが解除されます。現在、割り当てを解除せずに、約 2000 個の e レイヤーがあり、fps が約 5 である場合、プログラムは約 4 分まで正常に実行されます。
なぜ船はピウピウしないのですか?
(ところで、私は cocos2d フレームワークを使用しています) これは、2009 年の alex earley が著作権を所有するプロジェクトです。