2

のドキュメントにSKEmitterNodeは、particleLifetimeプロパティは次のように記載されています。

パーティクルの平均寿命 (秒単位)。

ただし、xcode 7.2.1 で怪し​​いものを見ています。爆発エミッターを変更しようとしていたとき、エディターでパーティクルのライフタイム値を大きくすると、爆発の合計サイズが大きくなると予想していました...パーティクルはより長く存続し、より遠くまで移動します。彼らが展開する速度を上げたくない、私は現在の速度が好きです. もっと遠くまで飛ばして、もっと大きな「爆発」を起こしてほしいだけです。

しかし、実際に xcode で見たのは、爆発はまったく同じサイズのままですが、描画の間隔が長くなったということです。パーティクルのライフタイムをたとえば 0.5 に調整すると、xcode が爆発を繰り返し描画することがわかります。間隔をたとえば 20 まで調整すると、xcode はまったく同じサイズの爆発を 20 秒ごとに 1 回描画します。それは私が期待していたものではありませんでした。

以下を使用して、xcode 経由でエミッターを作成しました。

  • テクスチャ: spark.png
  • 粒子発生率:5500
  • 最大パーティクル: 2266
  • 角度開始: 0
  • 角度範囲: 360
  • 速度: 70
  • 加速: 0
  • 白から黄色へのカラー ランプ

そして、次の実験を試みました。

-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{

    SKEmitterNode *node = [SKEmitterNode nodeWithFileNamed:@"ExplosionNuke"];
    SKEmitterNode *node2 = [SKEmitterNode nodeWithFileNamed:@"ExplosionNuke"];
    SKEmitterNode *node3 = [SKEmitterNode nodeWithFileNamed:@"ExplosionNuke"];
    SKEmitterNode *node4 = [SKEmitterNode nodeWithFileNamed:@"ExplosionNuke"];

    for (UITouch *touch in touches)
    {
        CGPoint touchPoint = [touch locationInNode:layerWorld];
        CGPoint left = CGPointMake(touchPoint.x - 100, touchPoint.y);
        CGPoint right = CGPointMake(touchPoint.x + 100, touchPoint.y);
        CGPoint top = CGPointMake(touchPoint.x, touchPoint.y + 100);
        CGPoint bottom = CGPointMake(touchPoint.x, touchPoint.y - 100);

        node.particleLifetime = .10;
        node2.particleLifetime = .99;
        node3.particleLifetime = 1.5;
        node4.particleLifetime = 300;

        node.position = left;
        node2.position = right;
        node3.position = top;
        node4.position = bottom;

        [layerWorld addChild:node4];
        [layerWorld addChild:node3];
        [layerWorld addChild:node2];
        [layerWorld addChild:node];

    }

画面上で 4 つのノードが同時にバーストすると、結果は次のようになります。

ライフタイム <= 0.99 の場合:爆発全体の形状が実際に変化します。値が小さいほど移動距離が短くなり、爆発が小さくなり、ビューからすばやく消えます。

for life >= 1.0:爆発のサイズは制限されます。1 ~ 2,250 の任意の値を指定すると、まったく同じサイズの爆発が作成され、まったく同じ時間だけ表示されます。ライフタイムが 2,000 のパーティクルは、ライフタイムが 1.0 のパーティクルより長くは見えません。また、ライフタイムが 1.00 を超える場合、パーティクルはカラー ランプを完全には完了しません。このエミッターは白から黄色に変化します。すべての期間が 1.0 未満の場合、ランプは完全に黄色になります。すべての値 > 1.0 は、著しく「白く」なります (画面から同時に消えますが)。

私は今、何をすべきかについて完全に混乱してparticleLifetimeいます。0.0 から 1.0 までの値のみが目に見える変化を起こしています。カラー ランプが持続時間 > 1.0 で完了していないという事実は、パーティクルがより長く持続し、色を変更するためのより多くの時間を必要としていることを認識していると思います。ただし、それが完了する前にビューから消えます。

ここで何が間違っていますか?node4 のパーティクルは、5 分間にわたって画面を横切り、最終的には画面外に移動し続けないのはなぜですか? ノード 3 とまったく同時にそれらがビューからフェードアウトするのはなぜですか?

4

1 に答える 1

3

エミッタのプロパティが負の場合、パーティクルは数秒経過するparticleSpeedScale前に見えなくなるまでサイズが小さくなります。particleLifetime

particleSpeedScaleプロパティが影響します

パーティクルのスケール係数が 1 秒あたりに変化する速度。

ここで、正の値は時間の経過とともに粒子のサイズを増加させ、負の値は粒子のサイズを減少させます。

たとえば、初期粒子サイズが 1 で、

particleSpeedScale = 0.5

パーティクルのサイズは、1 秒後に 1.5、2 秒後に 2.25 などになります。

初期粒子サイズが 1 で、

particleSpeedScale = -0.5

パーティクルのサイズは、1 秒後に 0.5、2 秒後に 0.25 などになります。

設定することから始めることをお勧めしますparticleSpeedScale = 0。これにより、粒子のサイズがライフサイクル全体で一定に保たれます。必要に応じてプロパティを調整します。

于 2016-02-15T09:58:43.037 に答える