概略
E3Dのパーティクル命令は、全て『秒』を基準にして操作することになっている。
フレーム数と秒を言ったり来たりするのは面倒なので、いっそのこと全部フレーム単位で扱おうじゃないか
りろん
E3DRenderParticle particleID,FPS,scid
パーティクルの描写命令。これの2番目の引数に1を指定するだけ。
この描写命令が呼び出されるたびに、1/FPS秒時が進んだことになる。引数に60を指定すれば、描写命令が60回呼び出された段階で1秒が経過したことになり、寿命が1秒のパーティクルは消える。
っつーことは、この引数に1を指定してやれば、内部では1フレーム=1秒として扱われることになる。
メリット
寿命の指定が楽
例えば、ゲームなんか作ってて、5フレームだけエフェクトを出したい、何て事がままある。
まあパーティクルの寿命に5/(現在のFPS)を指定してやればいいんだが、フィーリングというか、メンドクサイので。
スピードが操作しやすい
E3DSetParticleGravity E3DSetParticleVel0
これらで指定する速度は、秒速である。重力がない場合にパーティクルが毎フレーム進む距離は実際には速度/FPSとなっている。
FPSが60の場合
E3DSetParticleVel0 pid,-1000,-1000,-1000,1000,1000,1000:E3DRenderParticle pid,60,scid E3DSetParticleVel0 pid,-100,-100,-100,100,100,100:E3DRenderParticle pid,6,scid E3DSetParticleVel0 pid,-1000/60,-1000/60,-1000/60,1000/60,1000/60,1000/60:E3DRenderParticle pid,1,scid
これらは同じ動作をする。*1
ただしE3DSetParticleGravityで指定する重力を求める場合、2乗されていることを忘れないようにしなければならない。
E3D付属のサンプルの例。以下の2つはほぼおんなじ挙動をする。
FPS60で、従来の秒指定
E3DSetParticleGravity ptlid1, 4000 E3DSetParticleLife ptlid1, 2.0 E3DSetParticleVel0 ptlid1, -1000, 4000, -1000, 1000, 4000, 1000 E3DRenderParticle ptlid1, 60
FPSは同じく60だが、フレーム単位で操作
E3DSetParticleGravity ptlid1, 4000/(60*60) E3DSetParticleLife ptlid1, 2.0*60 E3DSetParticleVel0 ptlid1, -1000/60, 4000/60, -1000/60, 1000/60, 4000/60, 1000/60 E3DRenderParticle ptlid1, 1
何でこんな事考えたか
XXフレームでどこどこまで到達するパーティクルを飛ばして、そこで消える、という指定をやりやすくしたかったから。