前回は、Particle Designerの使用方法とファイルの出力方法を紹介致しました。
今回は、パーティクル作成ツールから出力したファイルを使用しcocos2d-xでパーティクルを表示させます。
cocos2d-xは、とても簡単にパーティクルを表示させることが出来ます。
まずは、下記の2つのファイルを”Resource”フォルダ直下に配置します。
- パーティクルとして表示するpngファイル (どのようなものでも構いません)
- Particle Designerから出力したplistファイル (パーティクルを制御する各パラメータが記載されているリスト)
あとは下記の3行を表示させたい箇所に追加するだけでパーティクルを表示することが出来ます。
CCParticleSystemQuad* particle = CCParticleSystemQuad::create("particle.plist"); particle->setPosition(ccp(480, 320)); this->addChild(particle);
パーティクル表示の際に使用する基本的な関数をいくつかあげておきます。
- stopSystem() ⇒ パーティクルの停止
- resetSystem() ⇒ パーティクルの開始
- setDuration( float ) ⇒ 引数で指定した秒数後に自動的にパーティクルを停止
パーティクルの各種パラメータはプログラム上で変更可能です。
setAngle( float )で放出角度、 setStartSize( flaot )でパーティクル発生時のサイズの設定等があり
関数名とツール上のパラメータ名は、ほぼ同じような表記となっていますので
ツールでパーティクルを作成した方は、比較的簡単にパラメータ設定が出来ると思います。
詳しくはリファレンスを参考にして下さい。
また、CCSpriteと同様にCCActionを使用可能なので、CCSequenceで制御すればいろいろと面白い表現が出来そうです。
以上で、plistを使用したパーティクルの実装方法の説明は終了となります。
■ おまけ
plistを使用したほうが遥かに実装が楽なので、あまり使われることがないかと思いますが
ソースコードで直接パラメータを設定する方法も記載しておきます。
//同時に表示するパーティクルの数を指定してインスタンスを生成 CCParticleSystem* particle = CCParticleSystemQuad::createWithTotalParticles(16); //画像を設定 particle->setTexture(CCTextureCache::sharedTextureCache()->addImage( "particle.png" )); //放出角度 particle->setAngle(90.0f); //上記パラメータに対するばらつき 360で全方向 particle->setAngleVar(0.0f); //再生開始後に何秒で停止するか -1で永遠に動作し続ける particle->setDuration(-1.f); //開始時の色 particle->setStartColor(ccc4f(1.0f, 1.0f, 1.0f, 1.0f)); //上記パラメータに対するばらつき particle->setStartColorVar(ccc4f(0.0f, 0.0f, 0.0f, 0.5f)); //終了時の色 particle->setEndColor(ccc4f(0.7f, 0.7f, 0.7f, 0.0f)); //上記パラメータに対するばらつき particle->setEndColorVar(ccc4f(0.0f, 0.0f, 0.0f, 0.0f)); //開始時のサイズ particle->setStartSize(100.0f); //上記パラメータに対するばらつき particle->setStartSizeVar(50.0f); //終了時のサイズ particle->setEndSize(70.0f); //上記パラメータに対するばらつき particle->setEndSizeVar(0.0f); //1つの画像の生存時間 particle->setLife(1.0f); //上記パラメータに対するばらつき particle->setLifeVar(10.0f); //終了時の回転 particle->setEndSpin(140.0f); //上記パラメータに対するばらつき particle->setEndSpinVar(0.0f); //開始時の回転 particle->setStartSpin(330.0f); //上記パラメータに対するばらつき particle->setStartSpinVar(-230.0f); //上記パラメータに対するばらつき particle->setPosVar(ccp(0.0f, 0.0f)); //タイプの指定(kCCParticleModeGravity or kCCParticleModeRadius) particle->setEmitterMode(kCCParticleModeGravity); /* ### setEmitterModeでGravityを選択した場合 ### */ //重力の設定 particle->setGravity(ccp(0.0f, 0.0f)); //放出速度 particle->setSpeed(20.0f); //上記パラメータに対するばらつき particle->setSpeedVar(140.0f); //エミッタを中心に回転 particle->setTangentialAccel(50.0f); //上記パラメータに対するばらつき particle->setTangentialAccelVar(320.0f); //回転しながら加速 particle->setRadialAccel(50.0f); //上記パラメータに対するばらつき particle->setRadialAccelVar(0.0f); /* ### setEmitterModeでGravityを選択した場合 ### */ /* ### setEmitterModeでRadiusを選択した場合 ### */ //開始時の半径 particle->setStartRadius(50.0f); //上記パラメータに対するばらつき particle->setStartRadiusVar(0.0f); //終了時の半径 particle->setEndRadius(25.f); //上記パラメータに対するばらつき particle->setEndRadiusVar(0.0f); //進む角度 particle->setRotatePerSecond(60.0f); //上記パラメータに対するばらつき particle->setRotatePerSecondVar(0.0f); /* ### setEmitterModeでRadiusを選択した場合 ### */ //blendの設定 ccBlendFunc blend = { GL_SRC_ALPHA, GL_ONE }; particle->setBlendFunc(blend); //パーティクル終了時に親から自動で削除 particle->setAutoRemoveOnFinish( true ); //親に張り付け this->addChild(particle);
■参考パーティクル
炎、煙、水のパーティクルを使用したサンプル動画です。
<次回の更新について>
次回からは、cocos2d-xから少し離れ”starling framework”についてご紹介します。