Мне показалось, что я столкнулся со странной проблемой с 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?
Любой полезный вклад приветствуется!