2010-10-01 4 views
0

Salut Tous Im juste avoir un problème avec les effets de particules n'apparaissant pas tout le temps. Im codage en utilisant l'objectif c et cocos2d pour l'iphone. Voici le code en question.effets de particule cocos2d n'apparaissent pas

CCParticleExplosion *emitter; 

    emitter = [[CCParticleExplosion alloc] initWithTotalParticles:30]; 
    emitter.texture = [[CCTextureCache sharedTextureCache] addImage:@"particle_bubble.png"]; 
    emitter.position = ccp(MidX,MidY); 
    emitter.life =0.5; 
    emitter.duration = 0.5; 

    emitter.speed = 60; 

    [self addChild:emitter]; 
    emitter.autoRemoveOnFinish = YES; 


    //////////////////////////////////////////////////// 

    CCParticleMeteor *emitter2; 

    emitter2 = [[CCParticleMeteor alloc] initWithTotalParticles:150]; 

    emitter2.texture = [[CCTextureCache sharedTextureCache] addImage:@"fire_particle.png"]; 
    emitter2.position = ccp(MidX,MidY); 
    emitter2.life = 0.5; 
    emitter2.duration = 2; 

    emitter2.speed = 60; 

    id emitMove = [CCMoveTo  actionWithDuration:0.5 position:HUD.moonSprite.position ]; 


    [self addChild:emitter2 z:1]; 

    [emitter2 runAction:[CCSequence actions:emitMove, nil]]; 
    emitter2.autoRemoveOnFinish = YES; 

Ce code se trouve dans la même fonction l'une après l'autre, comme illustré. mais parfois l'effet de la 2ème particule n'est pas créé et je ne peux pas comprendre pourquoi. le premier effet de particule est toujours créé sans problème, donc je suis sûr qu'il entre dans la fonction correctement mais parfois (presque 50%) l'émetteur du 2e météore n'est pas affiché. J'ai essayé de déconner avec des valeurs de z pour m'assurer qu'il n'est pas caché derrière un autre objet et il ne semble pas être le problème. Quelqu'un at-il des idées sur la raison pour laquelle cela se produirait? Merci G

+0

Avez-vous essayé de ne PAS déplacer le second émetteur? – jv42

+0

ouais et c'est la même chose parfois il apparaît et reste là où il a engendré et d'autres fois rien du tout – glogic

+0

quand je supprime autoRemoveOnFinish cela fonctionne à chaque fois. Quelqu'un a des idées pourquoi c'est? et comment puis-je libérer l'émetteur si je n'utilise pas autoRemoveOnFinish? Si j'ai plusieurs émetteurs en cours de création à la volée, comment puis-je les libérer sans autoremoveonfinish? – glogic

Répondre

0

Essayez ceci:

  1. Définir les émetteurs dans une variable locale (.h)

  2. Appelez ce avant que le code ci-dessus:

    if (emitter.parent == self) { 
        NSLog(@"em1 released"); 
        [emitter release]; 
    } 
    
    if (emitter2.parent == self) { 
        NSLog(@"em2 released"); 
        [emitter2 release]; 
    } 
    

    Ce vérifie si l'émetteur est un enfant et le supprime, de sorte que vous pouvez supprimer le emitter.autoRemoveOnFinish afin que votre émetteur montrera à chaque fois