Как изменить угол частицы в Cocos2D - PullRequest
0 голосов
/ 27 июня 2011

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

Изображение 1: воздействие обычных частиц:
Изображение 1: Воздействие нормальных частиц http://i51.tinypic.com/nmkt9y.jpg

Изображение 2: что мне нужно:
Изображение2: что мне нужно http://i56.tinypic.com/bffi4h.jpg

Ответы [ 2 ]

0 голосов
/ 18 апреля 2013

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

  1. Добавить свойство oldPos к частице tCCParticlestruct в 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];
    }
    
0 голосов
/ 28 июня 2011

Как насчет этого кода? Вам нужно переопределить 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
...