0

我似乎在 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 是否有其他人遇到过类似的问题?

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

4

1 回答 1

0

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

我最初将 CCParticleSystem 设置为 iPad 的 1.0(原始比例)和 iphone 的 0.5。我将 iPhone 的比例更改为 1.0,一切正常。只是更大了很多,但它确实有效。我真的不希望仅仅因为屏幕尺寸而对相同的效果有两种不同的粒子效果,所以我想我会在 iPad 上扩展到 2.0,而在 iPhone 上保留 1.0。瞧,现在 iPad 遭受了与我在 iPhone 上一样奇怪的外观效果,但更加极端。

看起来我现在没有太多选择了,但要拥有两个不同的文件以获得相同的效果,但我松了一口气,我发现了导致这种情况的原因,并且可以避免一些头发过早离开。

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

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

TLDR::当它跟随一个物体的位置时,放大/缩小一个粒子效果会导致这种奇怪的效果。不要重新缩放动态跟随对象位置的粒子效果。如果它只是在一个地方,那很好。

于 2012-03-26T08:36:51.430 回答