我似乎在 CCParticleSystem 和 iPhone 上遇到了一个奇怪的问题。
我有一个从左到右在屏幕上发射的激光。我添加了一个粒子效果,让激光看起来更像轨道炮。我使用了 Particle Designer 中的“emmas sharing”粒子效果。
这是在屏幕上发送激光的代码:
-(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 共享”效果,效果与您在屏幕上单击并拖动时的效果相同。这在 iPad 和 iPad 模拟器上完美运行,但是在我的 iPhone 3GS / iPhone(SD 和视网膜)模拟器上,发射的粒子似乎被激光“携带”。它与将 PositionType 设置为 kCCPositionTypeGrouped 不同(发射的粒子保持在那个圆形中),但它是 kCCPositionTypeGrouped 和 kCCPositionTypeFree 之间的一种混合。粒子从激光发射出来,但也被拖到激光后面一点,而不是像粒子设计器模拟器和普通 iPad 那样停留在发射的位置。看起来好像激光正在创建自己的层,上面有粒子效果,而“层”落后于它。
我以为激光可能移动得太快了,但即使放慢速度,它也有同样的效果。
这个“bug”还带来了另一个小问题,因为它是被激光“携带”的,当激光离开屏幕然后取出时,屏幕左下角可以看到最后发射粒子的残留物,因为我确定它是因为发射的粒子仍然跟随激光的 position.x(它不应该这样做,只有它的底部应该这样做)并且由于激光消失了,它默认为它的默认设置位置。但是,我在 iPad / iPad 模拟器上没有这个问题。
顺便说一句,这不仅限于“艾玛共享”粒子效果,似乎对所有其他效果也一样。
在 iPhone 的移动物体上使用 CCParticleSystems 是否有其他人遇到过类似的问题?
非常感谢任何有用的输入!