我似乎在CCParticleSystem和iPhone上遇到了一个奇怪的问题。
我有一个从左到右穿过屏幕的激光。我添加了一个粒子效果,使激光看起来更像轨道炮。我使用了粒子设计器中的"emmas分享“粒子效果。
下面是通过屏幕发送激光的代码:
-(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“还产生了另一个小问题,因为它是与激光一起”携带“的,当激光离开屏幕然后取出时,最后发射的粒子的残留物在屏幕的左下角可见,因为我确定这是因为发射的粒子仍然遵循激光的位置.x(它不应该这样做,只有它的底部应该这样做),并且由于激光消失了,它默认使用默认的设置位置。但是,我在iPad / iPad模拟器上没有这个问题。
顺便说一句,这不仅仅限于"emma共享“粒子效果,它似乎对所有其他效果都是一样的。
还有没有人在iPhone的移动对象上使用CCParticleSystems时遇到过类似的问题?
任何有用的意见我们都非常感谢!
发布于 2012-03-26 08:36:51
好的,经过一番纠缠之后,我发现了是什么导致了这一切。
我最初将iPad的CCParticleSystem设置为1.0 (原始比例),iphone设置为0.5。我将iPhone的比例更改为1.0,所有的东西都像should..just一样工作得更大了,但它确实起作用了。我真的不想仅仅因为屏幕大小就有两种不同的粒子效果来达到相同的效果,所以我想我应该在iPhone上保留1.0的同时,在iPad上放大到2.0。低看,现在iPad遭受了和我在iPhone上一样奇怪的外观效果,但要极端得多。
看起来我现在没有太多的选择,只能有两个不同的文件来实现相同的效果,但我松了一口气,我找到了导致这种情况的原因,可以避免过早离开。
我认为缩放效果是很好的,只要它不是动态跟随对象,就像我的例子一样。
我不知道这是否会被认为是一个错误,因为我确信这是cocos2d正在使用的一个数学问题,扩展它会影响它。
TLDR::放大/缩小粒子效果时,当它跟随对象的位置时会产生这种奇怪的效果。不要重新缩放动态跟随对象位置的粒子效果。如果它只在一个地方,那就没问题。
https://stackoverflow.com/questions/9858905
复制相似问题