0

CCParticleSystem と iPhone で奇妙な問題が発生したようです。

画面を左から右に横切ってレーザーを発射しています。パーティクル エフェクトを追加して、レーザーをレールガンのように見せました。Particle Designer の「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];
    }
}

Particle Designer で「emmas 共有」エフェクトを開くと、画面上でクリック アンド ドラッグした場合と同じ効果が得られます。これは iPad および iPad シミュレーターでは完全に機能しますが、私の iPhone 3GS / iPhone (SD および Retina) シミュレーターでは、放出された粒子がレーザーで「運ばれる」ように見えます。これは、PositionType を kCCPositionTypeGrouped に設定するのと同じではありません (放出されたパーティクルはその円形のままです)。パーティクルはレーザーから放出されていますが、Particle Designer シミュレーターや通常の iPad のように放出された場所にとどまるのではなく、レーザーの後ろに少し引きずられています。あたかもレーザーが粒子効果を持つ独自のレイヤーを作成しているかのように見え、その後ろに「レイヤー」が遅れています。

レーザーの動きが速すぎるのではないかと思いましたが、遅くしても同じ効果がありました。

この「バグ」は、別の小さな問題も引き起こします。レーザーが画面から離れて取り出されると、レーザーが「運ばれる」ため、最後に放出された粒子の残骸が画面の左下に表示されるためです。放出されたパーティクルがまだレーザーの position.x に従っているためだと確信しています (これは行うべきではありません。ベースのみが想定されています)。位置。ただし、iPad / iPad シミュレーターではこの問題は発生しません。

ところで、これは「エマ共有」パーティクル エフェクトだけに限定されたものではなく、他のすべてのエフェクトでも同じように動作するようです。

iPhone の移動オブジェクトで CCParticleSystems を使用する際に、同様の問題が発生した人はいますか?

役立つ情報をいただければ幸いです。

4

1 に答える 1

0

OK、いじり回した後、何が原因なのかがわかりました。

私はもともと CCParticleSystem を iPad では 1.0 (元のスケール) に、iPhone では 0.5 に設定していました。iPhone のスケールを 1.0 に変更したところ、すべて正常に機能しました。画面サイズの理由だけで、同じエフェクトに対して 2 つの異なるパーティクル エフェクトを使用したくはありませんでした。そのため、iPhone では 1.0 のままで、iPad では 2.0 にスケールアップすることにしました。見よ、iPad は私が iPhone で見たのと同じように奇妙に見える効果を被ったが、それよりもはるかに極端だった。

今はあまり選択肢がないように見えますが、同じ効果のために 2 つの異なるファイルを用意する必要がありますが、何が原因であるかがわかり、時期尚早に抜け落ちるのを防ぐことができてほっとしています.

私の場合のように、オブジェクトを動的に追跡しない限り、エフェクトのスケーリングは問題ないと思います。

これがバグと見なされるかどうかはわかりません。なぜなら、cocos2d が使用していてスケーリングが影響する数学的なものだと確信しているためです。

TLDR::パーティクル効果を拡大/縮小すると、オブジェクトの位置を追跡しているときに、この奇妙な効果が発生します。オブジェクトの位置を動的に追跡しているパーティクル エフェクトを再スケーリングしないでください。一箇所だけなら大丈夫です。

于 2012-03-26T08:36:51.430 に答える