CCParticleSystem и iPhone "ошибка" или ограничение? - PullRequest
0 голосов
/ 25 марта 2012

Мне показалось, что я столкнулся со странной проблемой с CCParticleSystem и iPhone.

У меня есть лазер, который стреляет по экрану слева направо. Я добавил эффект частиц, чтобы придать ему лазерный вид. Я использовал эффект частиц "совместное использование эммы" от Particle Designer.

Вот код для отправки лазера по экрану:

-(void)fireLaserCannonAddon
{
    if( _ship == nil || _ship.dead ) return;
    CGSize winSize = [CCDirector sharedDirector].winSize;
    shipLaserCannon = [_laserCannonArray nextSprite];
    [shipLaserCannon stopAllActions];
    shipLaserCannon.position = ccpAdd(_ship.position, ccp(shipLaserCannon.contentSize.width / 2, -shipLaserCannon.contentSize.height));

    [shipLaserCannon revive];

    CCParticleSystemQuad *laserEffect = [_laserEffect nextParticleSystem];
    [laserEffect resetSystem];

    [shipLaserCannon runAction:[CCSequence actions:
                                [CCMoveBy actionWithDuration:0.5 position:ccp(winSize.width, 0)],
                                [CCCallFuncN actionWithTarget:self selector:@selector(invisNode:)],
                                [CCCallFunc actionWithTarget:self selector:@selector(endLaserEffects)], nil]];
}

И код для установки эффекта системы частиц в положение лазера:

-(void)updateLaserEffects:(ccTime)dt
{
    for( CCParticleSystemQuad *laserEffect in _laserEffect.array )
    {
        laserEffect.position = shipLaserCannon.position;
    }
}

-(void)endLaserEffects
{
    for( CCParticleSystemQuad *laserEffect in _laserEffect.array )
    {
        [laserEffect stopSystem];
    }
}

Если вы откроете эффект «Совместное использование emmas» в Particle Designer, эффект будет таким же, как при нажатии и перетаскивании по экрану. Это прекрасно работает на симуляторе iPad и iPad, однако на моем симуляторе iPhone 3GS / iPhone (SD и сетчатка) испускаемые частицы, похоже, "переносятся" лазером. Это не то же самое, что установка PositionType в kCCPositionTypeGrouped (испускаемые частицы остаются в этой форме круга), но это своего рода смесь между kCCPositionTypeGrouped и kCCPositionTypeFree. Частицы излучаются из лазера, но при этом они немного тянутся за лазером, а не остаются там, где излучались, как на симуляторе Particle Designer и обычном iPad. Похоже, что лазер создает свой собственный слой с эффектом частиц, а «слой» отстает от него.

Я подумал, что, возможно, лазер двигался слишком быстро, но даже когда он замедлился, он имел тот же эффект.

Эта «ошибка» также создает еще одну небольшую проблему, поскольку ее «переносят» с лазером, когда лазер выходит за пределы экрана, а затем вынимается, остатки последних излучающих частиц видны в левом нижнем углу экрана. Я уверен, что это потому, что испускаемые частицы все еще следуют за позицией.х лазера (чего он не должен делать, только предполагается, что его основание), и так как лазер ушел, по умолчанию он это заданная по умолчанию позиция. Однако у меня нет этой проблемы на симуляторе iPad / iPad.

Кстати, это не ограничивалось только эффектом «деления Эммы», похоже, что он делает то же самое для всех остальных эффектов.

У кого-нибудь еще были подобные проблемы с использованием CCParticleSystems на движущемся объекте для iPhone?

Любой полезный вклад приветствуется!

1 Ответ

0 голосов
/ 26 марта 2012

Хорошо, поэтому после некоторого возни я выяснил, что все это вызывает.

У меня изначально была установлена ​​CCParticleSystem 1.0 (оригинальная шкала) для iPad и 0.5 для iphone. Я изменил масштаб для iPhone до 1,0, и все работало так, как должно… просто намного больше, но это сработало. Я действительно не хотел иметь два разных эффекта частиц для одного и того же эффекта только из-за размера экрана, поэтому я решил, что просто увеличу масштаб до 2.0 для iPad, оставив 1.0 на iPhone. К сожалению, теперь у iPad был тот же странный эффект, что и у меня на iPhone, но гораздо более экстремальный.

Похоже, что сейчас у меня нет большого выбора, но у меня есть два разных файла для одного и того же эффекта, но я с облегчением узнал, что вызвало это, и может спасти несколько волосков от преждевременного ухода.

Я думаю, что масштабирование эффекта хорошо, если оно не следует за объектом динамически, как в моем случае.

Я не знаю, будет ли это рассматриваться как ошибка или нет, так как я уверен, что cocos2d использует математические функции, и масштабирование влияет на это.

TLDR :: Масштабирование эффекта частицы вверх / вниз вызовет этот странный эффект, когда он следует за позицией объекта. Не масштабируйте эффекты частиц, которые динамически следуют за положением объекта. Если это только в одном месте, тогда это хорошо.

...