Снижение FPS при использовании эффектов частиц Cocos2D в CCTouchesMoved - PullRequest
4 голосов
/ 06 апреля 2011

Это код, который я использовал в CCTouchesMoved для создания эффектов частиц в местах соприкосновения.Но при использовании этого FPS падает до 20, а прикосновения движутся!Я попытался уменьшить жизнь и продолжительность частиц (вы можете видеть это в коде) .....

Как я могу исправить проблему снижения FPS при касаниях, перемещенных при использовании эффектов частиц ???

- (void)ccTouchesMoved:(NSSet *)touches withEvent:(UIEvent *)event 
{   
    UITouch *touch = [touches anyObject];
    location = [touch locationInView:[touch view]];
    location = [[CCDirector sharedDirector] convertToGL:location];

    swipeEffect = [CCParticleSystemQuad particleWithFile:@"comet.plist"];

    //Setting some parameters for the effect
    swipeEffect.position = ccp(location.x, location.y);

    //For fixing the FPS issue I deliberately lowered the life & duration
    swipeEffect.life =0.0000000001;
    swipeEffect.duration = 0.0000000001;

    //Adding and removing after effects
    [self addChild:swipeEffect];
    swipeEffect.autoRemoveOnFinish=YES;
}

Пожалуйста, помогите мне ... Я пробовал с разными частицами и минимизировал жизнь и продолжительность, но не сработало!Есть новые идеи для этого?или исправления для того что я сделал?

1 Ответ

4 голосов
/ 11 апреля 2011

Я очень подозреваю, что причина замедления в том, что вы создаете новый CCParticleSystemQuad каждый раз, когда касание перемещается.Почему бы просто не создать его экземпляр один раз в методе init или ccTouchesBegan, а установить только позицию и эмиссионное значение в ccTouchesMoved:

- (id)init {
   ...

   swipeEffect = [CCParticleSystemQuad particleWithFile:@"comet.plist"];
   swipeEffect.emissionRate = 0;
   [self addChild:swipeEffect];

   ...
}

- (void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
   swipeEffect.emissionRate = 10;
}

- (void)ccTouchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
   UITouch *touch = [touches anyObject];
   CGPoint location = [touch locationInView:[touch view]];
   location = [[CCDirector sharedDirector] convertToGL:location];
   swipeEffect.position = location;
}

- (void)ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
   swipeEffect.emissionRate = 0;
}
...