我似乎遇到了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还有其他人遇到过类似的问题吗?
非常感谢任何有用的输入!
答案 0 :(得分:0)
好的,所以经过一番乱搞,我发现了造成这一切的原因。
我最初将CCParticleSystem设置为1.0(原始比例)用于iPad,0.5用于iphone。我将iPhone的规模改为1.0,一切都像它应该工作......只是更大,但它确实有效。我真的不想因为屏幕尺寸而对同一效果有两种不同的粒子效果,所以我想我只会在iPad上扩展到2.0而在iPhone上留下1.0。很低,现在iPad遭遇了与我在iPhone上相同的怪异效果,但更加极端。
看起来我现在没有多少选择,但为了同样的效果有两个不同的文件,但我松了一口气,我发现了导致这种情况的原因,并且可以节省一些过早离开的毛发。< / p>
我认为缩放效果很好,只要它没有动态跟踪对象,就像我的情况一样。
我不知道这是否会被视为错误,因为我确定这是cocos2d正在使用的数学问题,并且缩放会影响它。
TLDR ::向上/向下缩放粒子效果会在跟踪对象的位置时产生这种奇怪的效果。不要重新缩放动态跟随对象位置的粒子效果。如果只是在一个地方,那就没事了。