28
28

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Particle2dxで作ったパーティクルの生成を4〜5倍高速化する

Last updated at Posted at 2014-06-24

cocos2dxでパーティクルを使いたい

パーティクル生成ツールはいくつかありますが、WEBで生成できるParticle2dxというツールがあります。
http://particle2dx.com/

ここで設定したパーティクルをplistとして出力すると、cocos2dxでパーティクルの設定として読み込むことができます。

パーティクル出た! でも...

ぶっちゃけplistを読み込んでるせいか、パーティクル生成がめっちゃ重いです。
いくつか理由がありますが、

  • initWithFile時に、一度読んだplistファイルのキャッシュもってなさそう
  • initWithDictionaryの辞書アクセスが重そう

とかが主な原因ぽい。

本題:plistをクラス化しちゃえばいいんじゃね?

ようやく本題。
たぶん同じParticleシステムを使ってる方はとっくに独自実装してると思いますが、plistをC++プログラムに変換するスクリプトを書きました。
コードの中身はv2系のinitWithDictionaryを忠実に移植してます。
自由に使ってアレンジしてくださって大丈夫ですが、ご利用はご利用は自己責任でお願いします。

スクリプト

長いのでGitHubにあげときます。
https://github.com/nubilum/convert-particle-plist

ベンチマーク

SampleScene.cpp
    CCParticleSystemQuad* particle = CCParticleSystemQuad::create("particleTexture.plist");
    CCParticleBatchNode* node = CCParticleBatchNode::createWithTexture(particle->getTexture(), 10000);
    double start = clock();
    for ( int i = 0; i < 20; i++ ) {
        CCParticleSystemQuad* particle = CCParticleSystemQuad::create("particleTexture.plist");
        particle->setPosition(ccp((i % 5) * 100, (i / 5) * 100));
        node->addChild(particle);
    }
    CCLOG("plist time: %f", ((double)clock() - start) / CLOCKS_PER_SEC);
    
    MeteorParticle* particle2 = MeteorParticle::create();
    CCParticleBatchNode* node2 = CCParticleBatchNode::createWithTexture(particle2->getTexture(), 10000);
    double start2 = clock();
    for ( int i = 0; i < 20; i++ ) {
        MeteorParticle* particle = MeteorParticle::create();
        particle->setPosition(ccp((i % 5) * 100 + 400, (i / 5) * 100));
        node2->addChild(particle);
    }
    CCLOG("class time: %f", ((double)clock() - start2) / CLOCKS_PER_SEC);
result
1回目
Cocos2d: plist time: 0.019896
Cocos2d: class time: 0.002814
2回目
Cocos2d: plist time: 0.016060
Cocos2d: class time: 0.004208

plistとclass化したものとで、大体4〜5倍(?)くらい生成速度が改善しました。
肝心の描画更新処理は、たぶんどっちも変わらんです。

余談

(´-`).。oO(でもぶっちゃけ、このパーティクルシステムをそのまま本番でも使うことあんまないんじゃ...)

28
28
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
28
28

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?