ゆめにっきっぽいゲームを作るスレ まとめwiki

避難所4 / 639

738 コメント
views
639
窯良(oneirokamara) 2025/05/08 (木) 19:29:30

一部、理解が完全でない部分があるかもしれず説明が適切でなかったらすみません。イベント処理法の注意です。

うろつきが陰に入ったことを表現するためにキャラクターのフラッシュを並列処理で用いるマップがあると思います。
フラッシュ処理のための「定期的に並列処理する」イベントの中で、「繰り返し処理」や「ラベルの設定&指定ラベルに飛ぶ」でキャラクターのフラッシュ処理を囲ってしまっている例があります。
(JIVV氏 天体美術館, Colby氏 草生す通路, 修正前のPGray氏 屋内プール など)

並列処理のなかで繰り返し処理やラベルループを使うと、繰り返し処理/ラベルループの中身を、ゲームの毎フレームごとにツクールが一万回程度処理しようと頑張ってしまいます。いたずらな処理負荷となってしまうため、おすすめしません。

繰り返し・ループの中にウェイト0.0秒を入れることでも処理負荷は改善できますが、そもそも繰り返し・ループを使わないほうが処理がさらに軽いです。
処理負荷はおそらくこんな感じの差があります。

ラベルループ+ウェイトなし > 繰り返し処理+ウェイトなし >>(数千倍の差)>> ラベルループ+ウェイト0.0秒あり > 繰り返し処理+ウェイト0.0秒あり ≒ 単にウェイトなし > 単にウェイト0.0秒あり

キャラクターのフラッシュに関しては、見た目に違和感がないのであれば、並列処理のなかで繰り返し・ループはせず、フラッシュのあとにウェイト0.0秒を挟んで並列処理することをおすすめします。

通報 ...
  • 640
    qxy 00ffcdf08e 2025/05/08 (木) 21:45:28 064a4@3450b >> 639

    負荷の軽減は私も関心のある事柄でした。とても些細な点ですが、1つ気になったことを聞いてもいいでしょうか。
    理屈で考えると多分こんな感じ(↓)になると思うので順番には概ね納得いくのですが、3と4に明確な差は確認できましたか。

    1. ラベルループ+ウェイトなし:1フレーム毎10000回フラッシュを実行
    2. 繰り返し処理+ウェイトなし:1フレーム毎5000回フラッシュを実行(フラッシュと:以上繰り返しで2ステップ)
    3. ラベルループ+ウェイト0.0秒あり:1フレーム毎1回フラッシュを実行
    4. 繰り返し処理+ウェイト0.0秒あり:1フレーム毎1回フラッシュを実行
    5. 単にウェイトなし:1フレーム毎1回フラッシュを実行
    6. 単にウェイト0.0秒あり:2フレーム毎1回フラッシュを実行(ウェイトとイベント実行内容終端で2フレーム)

    同じループ構造ならラベルが若干負荷が軽い…という話を聞いたことがありました。(おそらく体感できるほどの差でもないと思う)
    3 > 4 ≒ 5 が確認できたのなら、その話が間違っていたのかなと気になりました。

    641
    窯良(oneirokamara) 2025/05/08 (木) 21:54:10 修正 >> 640

    検証としては、キャラクターのフラッシュの代わりに便利変数を1加算する1行を使って、1.~6.の処理を作ったうえで、kuraudさんのCEV258指定変数表示を使って便利変数が増える速度を目視で確認して比較していました。

    私が見た限りでは、4.より3.のほうが速く加算が行われていて(速度として1-2割程度の差かと)、
    速く加算処理が行われている=一定時間内に行われる反復数が多い=一定時間内により多くの処理をゲームが行う
    と解釈して、3.のほうが4.より重たい処理になる、と(安易に)考えてしまいました。
    C258を介しての確認なので、本当に3.と4.に明確な差があるとこれで言ってよいのかどうかは自信がないんです。

    643
    窯良(oneirokamara) 2025/05/08 (木) 21:58:53 >> 640

    C258の処理にもウェイト0.0が入っているので、純粋な負荷検証としては不安がありますね。(大雑把な処理負荷が知りたくて、>> 639の確認をやっただけでした)

  • 644
    qxy 00ffcdf08e 2025/05/08 (木) 22:09:44 064a4@3450b >> 639

    ありがとうございます。納得しました。
    おそらくですが、厳密に測ってみると3,4,5は同じ速度になるのではないかなと思います。

    ウェイトなしのラベル・繰り返し処理のループが重いことや、ウェイトを挟んだほうが負荷は軽いことは間違いないと思います。