”テラリア”の様なエフェクトについて(パーティクル)

ホーム フォーラム CF2.5使用法全般 ”テラリア”の様なエフェクトについて(パーティクル)

  • このトピックには4件の返信、2人の参加者があり、最後にq_taroにより7年、 8ヶ月前に更新されました。
5件の投稿を表示中 - 1 - 5件目 (全5件中)
  • 投稿者
    投稿
  • #10511
    q_taro
    参加者

    よろしくお願いします。

    テラリアというゲームで草やガラクタといったオブジェクトを破壊すると、
    花火のように大量の粒がランダム散らばって地面に落下していきます。

    これを再現するのに参考になりそうなサンプルが見つかりましたが、
    イベントに記述がなさげな半透明処理が使われていたり、
    “( Random(31 ) – 20 ) * 0.5″の様な数式があったりで何が行われているかが理解出来ません。

    http://www.mediafire.com/download/d185x3vqm3wm1xf/Particles+Awesome.mfa

    1.オブジェクト名”Particle”のイベントが肝だと思うのですが、
     どのような処理が走っているのでしょうか?
    2.テラリアでは大量の粒状オブジェクトが常に発生していますが、重くなることはありません。
     CF2.5で大量に似たような粒状オブジェクトを大量発生させると処理速度に影響が出てきますでしょうか?

    以上、よろしくお願いいたします。

    #10732
    ASD
    キーマスター

    >>q_taroさん
    テラリアは未プレイですので、挙がっているサンプルについてご説明させていただきます。


    まず、『半透明』のイベントですが、こちらにあります。これは、CF2.5の前のソフトである『Multimedia Fusion 2(MMF2)』で使われていた半透明処理で、0~128までの範囲で指定します。CF2.5では『アルファブレンド係数(0~255)』が追加されましたので通常はそちらを使います。こちらの機能はMMF2のMFAファイルとの互換性のために残してあるものです。こちらのアクションが使われていることから、このサンプルはMMF2で作成されたということが判ります。


    こちらの『( Random(31 ) – 20 ) * 0.5″”』の『( Random(31 ) – 20 )』は乱数の範囲を指定するためにこのような記述になっております。『Random(31)』だけでは、0~30までの値が生成されまが、そこから– 20することで、生成される値が、-20~10までの範囲になるようになっています。こちらもCF2.5にはある範囲指定乱数がMMF2では存在していなかった為にこのようになっています。


    最後に、『Particle』のオブジェクトイベントにあるこのイベントで粒子の移動が座標変更によって行われています。X,Y座標変更アクションでは、直接入力では整数しか指定することができず、小数点以下の値を入れると動きません。小数点以下の値を含んだ値で座標変更する場合は、一旦その値を変数へ格納し、その変数を座標変更時に指定することで動かすことができます。粒子生成時(2番目の画像)に変数Horz及びGravには0.5が掛けられて小数点以下の値が含まれている為にこのような手順になっています。

    処理速度については、表示モードが『Direct 3D』に設定されていればかなり余裕はあります。しかし、やはりスペックによって差がありますので、限界がどの程度かは、連続で生成するイベントを組んでご自身で確認されてみるのが一番ではないでしょうか。

    参考になりましたら幸いです。

    • この返信は7年、 8ヶ月前にASDが編集しました。
    #12781
    q_taro
    参加者

    >>ASD様
    アドバイス有難う御座います。
    再現に成功しましたが、条件が一致する間切れ目なくエフェクトが発生します。
    (例えばサンプルでは”キーを押している間繰り返す”にした場合など。)
    0から20まで加算する変数を作り、変数が20であることを条件に加えれば
    多少ましにはなりますが、大量にエフェクトを作るとイベントが分かり辛くなると予想します。
    タイマーの条件がありますが、加算していくのみでリセット方法が分かりませんでした。
    例えば0.5秒毎に1度という条件指定をする場合どのように設定すればよいでしょうか?
    以上よろしくお願いいたします。

    #12784
    ASD
    キーマスター

    >>q_taroさん
    ゲーム用途でタイマーを使うと処理落ちした場合に正常に進行しなくなる恐れがあります。
    イベントの実行間隔を設定する場合は変数を使うようにします。
    例えば今回の○○秒毎に生成という場合には、キーを押す→フラグON→変数増加→変数が指定値になったら生成、という流れです。
    変数で制御する場合、時間はフレーム単位で考えます。60FPSの場合、常に1ずつ増やすと1秒間に60まで増えるので、0.5秒は半分の30ということになります。
    フラグ噛ませるのは、押している時を条件に増加するやり方では、押していない時には増えず、生成されないからです。

    – サンプルプログラム
    https://blog.clickteam.jp/wp-content/uploads/2016/08/cf25_blog_2016-08-21_Particles_Awesome_non_timer_condition.zip

    #12785
    q_taro
    参加者

    >>ASD様
    サンプル確認しました。
    確かにご指摘の通り変数だけでイベントを組んだ場合に微妙に感覚が開く場合があり、
    結局不自然さを感じていた部分もフラグが無い為だったようです。
    サンプルを参考にしたところ自分で組んだものも均等にエフェクトが動作するようになったことを確認しました。
    >>ゲーム用途でタイマーを使うと処理落ちした場合に正常に進行しなくなる恐れがあります。
    キャラクター生成時にタイマーを使っている部分があるようですので修正していきます。
    アドバイス頂きありがとうございました。

5件の投稿を表示中 - 1 - 5件目 (全5件中)
  • このトピックに返信するにはログインが必要です。