Appendix

広告

Entries

並列処理を使おう

前回紹介したファイバーはとても便利ですが、扱うにはスクリプトの知識が必要です。
スクリプト知ってる人でも、あんなので理解できたかどうかも疑問です。

ですが、実は簡単にファイバーを扱える方法があります。
それがイベントの並列処理です。

VXAceからイベントの実行内容はファイバーで処理されています。
イベント実行はファイバーの特性をよく生かしていると思います。

特に並列処理は、ファイバーを最も簡単に扱えるツールだといっても過言はありません!


でも、並列処理は重いとツクールの世界(?)ではよく言われます。
本当にそうなのでしょうか?

私はそう思っていません。

なぜなら、前回のファイバーの話の中でも言ったとおり、「箱庭の勇者たち」の戦闘では実に30個以上のファイバーが常に動いています。
半数以上はオリジナルのAIですが、残りのスキルはイベントを使っているので並列処理と変わりません。
AIも決して軽いものではありません。

それでも、FPSが大きく落ちることはないと思います。(さすがに人数が多いと落ちますが・・・)

なので、並列処理自体は重くはありません。
重くなるのは、実行内容で良くない処理を行なっているのが原因です。


長くなりましたが、ようやく本題。
どうすれば並列処理が軽くなるか、紹介していきましょう!




・ウェイトを入れる
よく言われる解決方法です。
少しでも正確に動作するように毎フレーム処理したくなるのはわかりますが、レスポンスが悪くなるとしてもウェイトは入れたほうがいいです。
もちろん、長ければ長いほど良し。

参考程度に、移動速度が4(これはプレイヤーの速度です)のキャラクターがダッシュしている場合、8フレームで1歩移動します。
移動速度が6(これが飛空艇の速度です)なら、4フレームで1歩になります。
位置情報を取得したいのなら、この数値を1減らしたくらいでいいと思います。


・ループを使う
以下にある二つの並列処理のイベントは全く同じ動きをします。
2013011801.jpg
まず、左にはウェイト2が入っているのに、右にはないじゃないか! と思うかもしれませんが、実はイベント処理は最後まで実行するとウェイト1が入り、終了した後にまたイベントを実行し直すのに1フレームのラグがあります。
自動実行だと、ウェイト1は残りますがラグの方はなくなります。謎仕様です。

とにかく、並列処理ではこれで同じ動きになります。
ではどう違うのか?

イベントを実行し直すのに、ファイバーを作り直しているという点が違います。

ファイバーを作るのは軽い処理ではありません。
・・・と言ってもRubyの中では の話ですが。
ツクールではフレーム数が落ちるようなことはないと思いますが、並列処理の数が多くなればやはり重くなってしまいます。

なのでループを使ったほうが、わずかに軽いです。

ループの代わりにラベルジャンプを使っても問題ありません。どちらも大差ありません。
個人的には、ループ中断があったり、見やすいという理由でループのほうがいいと思います。


そしてちょっと似たような問題で、コモンイベントの呼び出しがあります。

コモンイベントを呼び出した時にも、実はファイバーが作成されています。
しかも、そのファイバーは使われません。

さらに、呼び出した実行内容が終了した後に、ウェイト1が入ってたりします。ラグはありません。

コモンイベント呼び出しはイベントが管理しやすいのでとても便利です。
私もよく使っています。

ですが、この問題があるのでループなどで連続して呼び続けるのには向かなかったりします。
不便ですね。


・スイッチや変数の操作を行わない
実を言うと、今までのはほんの些細な問題で、コレが一番の原因だったりします。
これも知ってる人は知っているよくある原因です。

スイッチや変数、セルフスイッチを操作すると、マップにある全イベントのページ判定と、コモンイベントの実行判定が行われるようになっています。
全てのイベントで、どのページの出現条件が満たされるか判定されるわけですから、イベントが多いほど重くなります。
しかも、それが毎フレーム行われるとしたら、処理落ちしないはずがありません。

とにかく、毎フレームスイッチや変数を操作するようなことは絶対にやめましょう。
値が変わらなくても、操作しただけでページ判定は行われます。

ちなみに、操作するのが重いだけで、参照するのは重くありません。
例えば、条件分岐などで使うだけなら大丈夫です。


・・・とはわかっていても、操作しなければならない時というのはあります。
特に、プレイヤーの位置情報を常に取得するには、変数の操作しか無いわけです。

スクリプトが組める人なら、新たに変数を作ってそこに値を入れれば良いことです。
むしろ、変数使わずに条件分岐でスクリプト入力したほうが速いくらいです。


ではスクリプト組めない人はどうしたらいいのか?


・・・どうしようもありません。


ならば、どうにか出来るスクリプト素材を作ろう!


というわけで、次はスイッチや変数を操作してもページ判定を行わなかったり、コモンイベント呼び出しで無駄なファイバーを作らないような素材を配布しようと思います。


なんというか、結局ただの素材の宣伝でした(/ω\)
スポンサーサイト
この記事にトラックバックする(FC2ブログユーザー)
http://woodpenguin.blog.fc2.com/tb.php/19-1da7551e

トラックバック

コメント

コメントの投稿

コメントの投稿
管理者にだけ表示を許可する

Appendix

プロフィール

木星ペンギン

Author:木星ペンギン
ほぼツクールのことばかり書いてます。
名前は↑から取りました。
木製ですが木星です。
トカゲは関係ありません。

ゲーム

  • 箱庭の勇者たち(体験版)
  • アクイ ト アイ
  • ぼくらの大革命!
  • 勇者がやらねば俺がやる!
  • 3Turn Battle!
  • 3TurnBattle!2nd 体験版

メールフォーム

wood_penguin@yahoo.co.jp

名前:
メール:
件名:
本文: