Как изменить угол частиц в Cocos2D

Теперь я встретил новый вопрос. Как изменить угол каждой частицы, чтобы она была направлена ​​к центру. Как и изображения:

Изображение 1: воздействие нормальных частиц:
 Изображение 1: воздействие нормальных частиц

Изображение 2: которое мне нужно:
http://tinypic.com/images/404.gif


person Huwell    schedule 27.06.2011    source источник


Ответы (2)


Как насчет этого кода? Вам необходимо переопределить метод CCParticleSystemQuad update: или updateQuadWithParticle: newPosition: для указания вращения частиц. CCParticleSystemPoint не может вращать частицы.

@interface MyParticleSystem : CCParticleSystemQuad
@end

@implementation MyParticleSystem
- (void)updateQuadWithParticle:(tCCParticle*)particle newPosition:(CGPoint)pos
{
    particle->rotation = ccpToAngle(particle->pos) * 180.0f / M_PI;
    [super updateQuadWithParticle:particle newPosition:pos];
}
@end
person Kazuki Sakamoto    schedule 28.06.2011
comment
Спасибо, Кадзуки. Я проверил ваши коды, но не могу направить каждую частицу к центру. - person Huwell; 29.06.2011

Чтобы повернуть частицы в направлении их движения (в вашем случае: к центру), вы можете сделать следующее:

  1. Добавьте свойство oldPos в структуру частицы tCCParticle в CCParticleSystem.h
  2. Инициализируйте свойство oldPos с начальной позицией частицы в initParticle: в CCParticleSystem.m
  3. Обновите свойство oldPos, указав текущую позицию частицы в update: в CCParticleSystem.m перед вычислением новой позиции. Я делаю это в строке 512 сразу после проверки, жива ли частица.
  4. Заменить CCParticleSystemQuad, как предложено Кадзуки:

    - (void)updateQuadWithParticle:(tCCParticle *)particle 
                       newPosition:(CGPoint)pos
    {
        CGPoint direction = ccpSub(particle->pos, particle->oldPos);
        CGPoint n = ccpNormalize(direction);
        CGFloat a = -CC_RADIANS_TO_DEGREES(ccpToAngle(n) - M_PI_2);
        particle->rotation = a;
    
        [super updateQuadWithParticle:particle newPosition:pos];
    }
    
person Raginmari    schedule 18.04.2013