0

この関数は何もせず、約 30 秒後に fps が下がり始めます。ccparticle を正しく表示するにはどうすればよいか知りたいです。

これが私のコードです:

-(void) coccomilk:(CGPoint) p{

   CCParticleSystemQuad *milk = [[[CCParticleSystemQuad alloc] initWithTotalParticles:100 ] autorelease];

   milk.texture = [[CCTextureCache sharedTextureCache] addImage:@"milk.png"];
   milk.emitterMode = kCCParticleModeGravity;
   milk.totalParticles = 100;
   //milk.particleCount = 100;
   milk.life = 0.2f;
   milk.lifeVar = 0.1f;
   milk.startSize = 32;
   milk.startSizeVar = 32;
   milk.endSize = 2;
   milk.endSizeVar = 0;
   milk.angle = 90;
   milk.angleVar = 42;
   //milk.rotation = 0;
   //milk.rotatePerSecond = 0;
   //milk.rotatePerSecondVar = 0;
   milk.speed = 651;
   milk.speedVar= 335.5;
   milk.gravity = ccp(0,-2.72);
   //milk.blendAdditive = NO;
   milk.duration = 0.08;
   //milk.blendFunc = (ccBlendFunc) {GL_ONE,GL_DST_ALPHA} ;
   milk.emissionRate = milk.particleCount / milk.life;
   milk.radialAccel = 0;
   milk.radialAccelVar = 0;
   milk.tangentialAccel = 0;
   milk.tangentialAccelVar = 0;
   ccColor4F color = {1.0f,1.0f,1.0f,0.8f};
   milk.startColor = color;
   milk.startColorVar = (ccColor4F) {0.0f,0.0f,0.0f,0.0f};
   milk.endColor = color;
   milk.endColorVar = (ccColor4F) {0.0f,0.0f,0.0f,0.0f};
   milk.position = ccp(p.x,p.y);
   //milk.posVar = 0.0;
   milk.sourcePosition =  ccp(p.x,p.y);
   milk.visible = YES;

   [self addChild:milk z:2];

   milk.autoRemoveOnFinish = YES;
   [milk release];
   //[self performSelector:@selector(clearSprite:) withObject:water afterDelay:0.4];
}
4

2 に答える 2

0

ParticleDesigner を試してみることをお勧めします。これは、必要なパーティクルをグラフィカルにデザインし、満足したら cocos2d が管理できる構成ファイルを生成できる軽量アプリケーションです。http://particledesigner.71squared.com/

于 2012-08-24T20:26:28.257 に答える
0

さらに間違いがあります:

  1. 間違った排出率があります。初期化時の0は、実際の粒子数から数えています。あなたの energyRate は 0 です。これは、パーティクルが放出されないことを意味します。正しい計算は次のとおりです。

    milk.emissionRate = milk.totalParticles / milk.life;
    
  2. リリースが多すぎます。最後のリリース (autoRemoveOnFinish) でクラッシュするため、[milk release]コードから最後のリリースを削除してください。パーティクル システムは、有効期間が終了すると解放されます。これが autoRemoveOnFinish の目的です。手動で行う必要はありません。

于 2012-08-25T06:34:46.930 に答える