透明イベントの動作の有無を「有効条件」でつけるのと、「イベント実行内容」の条件式でつけるのではどっちが快適にプレイできますか?(質問掲示板

投稿: User icon mini 退会したユーザー 投稿:2014/02/19 19:15:19(最新:2014/02/20 08:00:20)
2DRPGについての質問です。

イベントを多く設置すると「重く」なるという話を聞いたことがあります。
それは、それらのイベントが「有効条件」を満たしていない場合でも、そうなのでしょうか?

例えば透明通行可のイベントの動作の有無は、「有効条件」でつけるのと、
イベント実行内容の条件式でつけるのではどっちが快適にプレイできますか?

どうかご教示下さい。
システム的なことなので、できれば運営さんにご回答頂ければ幸いです。

コメントする

コメントするには、ログインする必要があります。

コメント一覧

Material 6858 mini akasata(投稿日:2014/02/20 01:02, 履歴)
運営のあかさたです。

パフォーマンス系の問題については何をしたいのかによって適した書き方は変わるので、一般論しか回答できませんが・・・。

Rmakeが遅いという場合、二つの現象を指していることが多いです。

(1) 描画が遅い(画面上のキャラクタの数が多くて遅くなる)
(2) スクリプトの実行速度(計算速度)が遅い

(1)は、有効条件で描画対象を減らすことで遅くなる問題を回避することができます。もっとも、キャラクタが設定されていない透明イベントはそもそも描画コストがかかりません。

(2)についてですが、ノベルゲームで作られたシューティングゲームがコマ落ちしたりしているので、スクリプトの実行が遅いことは知られていることだと思います。

問題は、一見するとスクリプトの実行中ではない(イベントの実行中ではない)ときに、スクリプトが原因で遅くなることがあることです。

ここで、有効条件の話になります。

有効条件のスクリプトは、主にイベント終了時に実行されます。イベント終了時に全イベントの有効条件をチェックすることで、イベントの有効無効を切り替えるようになっています。

通常のフィールド移動時などには有効条件のスクリプトは実行されないため、マップに有効条件が指定された透明イベントを100個や200個置いても快適に動作します。

しかし、たとえば毒の沼地のようなものを作ると、一歩歩くごとにイベント処理が実行されて終了後にマップ中の全イベントの有効条件のスクリプトが実行されることになります。従って、一歩ごとに動作がカクカクする現象が発生します。このような場合は、イベントを終了させずに歩行する方法を検討するか、ある程度はカクツキを容認する必要があります。

見た目上描画されているキャラが多くないのに動作が重くなっている場合は、この有効条件のスクリプトの実行頻度が問題になっているケースが多いです。

まとめると、(1)が原因であれば、有効条件によって描画する対象を減らすことが有効です。(2)が原因の場合は、スクリプトの高速化や実行頻度を減らす工夫が有効です。

以下、個別ご質問についてです。

>例えば透明通行可のイベントの動作の有無は、「有効条件」でつけるのと、
>イベント実行内容の条件式でつけるのではどっちが快適にプレイできますか?
>
有効条件はあたり判定などの処理の軽減にもかかわってくるので、基本的には有効条件を使うことをお勧めします。

>同じキャラクター素材の別イベントを各所に配置するのでは、
>やはり前者の使い回しの方が軽くなるのでしょうか?
>
理論上は軽くなりそうですが、イベントの数を数百とか数千とか削減しないと体感できる差は生まれないのではないかと思います。

>似た内容ですが、要は「有効条件を満たしていないイベントは軽いのか」が知りたいのです。
>
有効条件を満たしていないイベントは、描画コスト、あたり判定コストがかからなくなるので軽いです。
User icon mini 退会したユーザー(投稿日:2014/02/20 08:00, 履歴)
丁寧なご回答大変ありがとうございました。
非常に参考になりました。
User icon mini 退会したユーザー(投稿日:2014/02/19 19:34, 履歴)
追記です。

例えば、同じキャラクターが色んな場所で現れて会話などする場合、
同一のイベントを移動させて何度も使うのと、
同じキャラクター素材の別イベントを各所に配置するのでは、
やはり前者の使い回しの方が軽くなるのでしょうか?

後者の場合でも、「有効条件」によって、必要な場面でだけ条件を満たし
出現するようにすれば軽くなるのでしょうか?

似た内容ですが、要は「有効条件を満たしていないイベントは軽いのか」が知りたいのです。
改めてよろしくお願いします。