CCParticleSystem和iPhone" bug"或限制?

时间:2012-03-25 08:47:59

标签: ios cocos2d-iphone particles

我似乎遇到了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 sharing”效果,效果与在屏幕上单击并拖动时的效果相同。这在iPad和iPad模拟器上完美运行,但是在我的iPhone 3GS / iPhone(SD和视网膜)模拟器上,发射的粒子似乎被“携带”了激光。它与将PositionType设置为kCCPositionTypeGrouped(发出的粒子保持在该圆形状)不同,但它是kCCPositionTypeGrouped和kCCPositionTypeFree之间的混合类型。这些粒子从激光器中散发出来,但也在激光器后面拖了一下,而不是像在Particle Designer模拟器和常规iPad上一样停留在它发射的地方。看起来好像激光正在创造自己的层,粒子效应就在它上面,“层”落后于它。

我认为激光可能移动太快,但即使放慢速度也会产生同样的效果。

这个“虫子”也造成了另一个小问题,因为它是用激光“携带”的,当激光离开屏幕然后取出时,最后一个发射粒子的残余物在左下方可见。屏幕,因为我确定它是因为发射的粒子仍然跟随激光的位置x(它不应该做,只有它的底部应该),并且由于激光消失,它默认为它是默认的设定位置。但是,我在iPad / iPad模拟器上没有这个问题。

BTW,这不仅限于“emma sharing”粒子效果,它似乎对所有其他效果都做同样的事情。

在iPhone的移动物体上使用CCParticleSystems还有其他人遇到过类似的问题吗?

非常感谢任何有用的输入!

1 个答案:

答案 0 :(得分:0)

好的,所以经过一番乱搞,我发现了造成这一切的原因。

我最初将CCParticleSystem设置为1.0(原始比例)用于iPad,0.5用于iphone。我将iPhone的规模改为1.0,一切都像它应该工作......只是更大,但它确实有效。我真的不想因为屏幕尺寸而对同一效果有两种不同的粒子效果,所以我想我只会在iPad上扩展到2.0而在iPhone上留下1.0。很低,现在iPad遭遇了与我在iPhone上相同的怪异效果,但更加极端。

看起来我现在没有多少选择,但为了同样的效果有两个不同的文件,但我松了一口气,我发现了导致这种情况的原因,并且可以节省一些过早离开的毛发。< / p>

我认为缩放效果很好,只要它没有动态跟踪对象,就像我的情况一样。

我不知道这是否会被视为错误,因为我确定这是cocos2d正在使用的数学问题,并且缩放会影响它。

TLDR ::向上/向下缩放粒子效果会在跟踪对象的位置时产生这种奇怪的效果。不要重新缩放动态跟随对象位置的粒子效果。如果只是在一个地方,那就没事了。