新規記事の投稿を行うことで、非表示にすることが可能です。
2018年08月04日
変数活用のススメ
◆変数活用のススメ
色々試していて気付いたので備忘録的にメモです。
制御文字の中に、変数を指定できることを知りました。
変数で指定していれば、あとから一括変更が可能となります。
これは便利。
■準備
変数に色番号を格納する
ツクールMVの色番号はこちらのサイト様がサンプルを上げてくださってます。
http://ossangame.com/text_color
変数に色番号の数値を格納しておきます。
例:
◆変数の操作:#0018 選択肢1の色 = 4
◆変数の操作:#0019 選択肢2の色 = 3
◆変数の操作:#0020 選択肢3の色 = 6
■選択肢に実装
実践です。
選択肢に文字列の色付け\c[]の制御文字の中に入れ子で\v[]を入れます。
\c[\v[18]]
\c[\v[19]]
\c[\v[20]]
◆選択肢の表示:\c[\v[18]]幽霊?, \c[\v[19]]夢で視た……, \c[\v[20]]死神?
この通り反映されました。
■応用
ツクールの色番号は0〜31までの32種類。
しかしテキスト表示系のプラグインを使えばRGBで指定できるようになります。
つまりRGBの値を変数に格納すれば更に幅が広がります。
【追記】
・調べたところスクリプトに格納できる型にしないといけないからイベントテンプレートに
情報集約して編集とした方が良いかもです。
RGB指定はコアスクリプト改変のほか、Trbさんの次のプラグインや木星ペンギンさんのプラグインが有用です。
Trbさん
http://blog.livedoor.jp/trb_surasura/archives/19021531.html
木星ペンギンさん
http://woodpenguin.web.fc2.com/MV_Plugin/MessageEX.html
■変数の使いどころについて
「2つ以上」の「変更する可能性がある値」は変数にした方が良い、というのはよく聞きますね。
でも実際には2つ程度なら値を直接入力する場面の方が多いと思います。
なぜならば変数を利用するとき、これだけ考える要素があるからです。
・変数の登録コスト
-登録場所(ID何番を使うか、前後の並びにどう配慮するか)
-名称
・変数の呼び出しコスト
-\v[]〜と入力する手間
一方で変数にしておけばよかったと思うのは、次のような場合。
・数は少ないが、どこに使ったかわからない値
色々な場所に設定していて、マップID,イベントIDを探し当てられない…
これがバグの元になります。
また変数自体も命名をしくじると「これなんの変数だっけ」となります。
以上をふまえ、変数についての考えをまとめます。
・変数を利用した方が良い場合
-2つ以上
-離れたMAPID,イベントIDで利用
※一元管理だけではなく、探すコストも判断基準に入れます
・変数は分かりやすく管理する
1.変数名から目的がわかるように命名する
-Chapter2で利用する変数ならC2_hogehoge
-ゲーム内全般で利用するならSys_hoghogeなど
2.コモンイベントの中にまとめる
コモンイベントにわかりやすい名前をつけたうえで、先の変数をまとめます
コモンイベント名はデータベースからCtrl+Fで検索ができるので、見出し代わりになります
【追記】
・トリアコンタンさんのイベントテンプレート、イベント動的生成プラグインが変数に対応していることがわかりました
1.イベントテンプレートでコピー元イベントを作成
2.動的生成のプラグインコマンドで1を呼び出す
例.
* ERS_ランダム生成 1 1 2 3 5 4 # イベントID[1]のイベントを下記の条件(※)で配置
* ERS_MAKE_RANDOM 1 1 2 3 5 4 # 同上
2のプラグインコマンドの各種値(例で挙げると1 2 3 5 4 )部分が変数に対応しているとのこと。
地形タグ、リージョンに変数を割り当てれば一元管理が可能になります。
テンプレートイベントプラグイン
https://triacontane.blogspot.com/2016/06/blog-post_25.html
イベント動的生成
https://triacontane.blogspot.com/2016/08/blog-post.html
◆◇◆◇
変数はこのような作品管理のほか、プレイ情報やゲームデータも格納できます。
そしてコモンイベントをラベル代わりに使うことで、制作の効率化は進みます。
スクリプトを活用することで変数に格納する情報は大幅に広がります。
・スクリプトで取得可能な情報一覧
執筆:トリアコンタンさん
https://docs.google.com/spreadsheets/d/1rOIzDuhLC6IqJPEFciYOmXWL_O7X9-hMValMs7DpWCk/edit#gid=0
これらを応用すれば、戦闘回数をもとにゲーム側で難易度を自動調整する機能も実装できます。
(それが良いかは別として)
プレイヤーの操作→反応、これがゲームのコアな面白さの一部だと思うので、この辺りにも注目したいところ。
共通作業をいかにまとめるか
プレイ情報をどのように活かすか
これらは制作を楽しくする秘訣かもしれません。
色々試していて気付いたので備忘録的にメモです。
制御文字の中に、変数を指定できることを知りました。
変数で指定していれば、あとから一括変更が可能となります。
これは便利。
■準備
変数に色番号を格納する
ツクールMVの色番号はこちらのサイト様がサンプルを上げてくださってます。
http://ossangame.com/text_color
変数に色番号の数値を格納しておきます。
例:
◆変数の操作:#0018 選択肢1の色 = 4
◆変数の操作:#0019 選択肢2の色 = 3
◆変数の操作:#0020 選択肢3の色 = 6
■選択肢に実装
実践です。
選択肢に文字列の色付け\c[]の制御文字の中に入れ子で\v[]を入れます。
\c[\v[18]]
\c[\v[19]]
\c[\v[20]]
◆選択肢の表示:\c[\v[18]]幽霊?, \c[\v[19]]夢で視た……, \c[\v[20]]死神?
この通り反映されました。
■応用
ツクールの色番号は0〜31までの32種類。
しかしテキスト表示系のプラグインを使えばRGBで指定できるようになります。
つまりRGBの値を変数に格納すれば更に幅が広がります。
【追記】
・調べたところスクリプトに格納できる型にしないといけないからイベントテンプレートに
情報集約して編集とした方が良いかもです。
RGB指定はコアスクリプト改変のほか、Trbさんの次のプラグインや木星ペンギンさんのプラグインが有用です。
Trbさん
http://blog.livedoor.jp/trb_surasura/archives/19021531.html
木星ペンギンさん
http://woodpenguin.web.fc2.com/MV_Plugin/MessageEX.html
■変数の使いどころについて
「2つ以上」の「変更する可能性がある値」は変数にした方が良い、というのはよく聞きますね。
でも実際には2つ程度なら値を直接入力する場面の方が多いと思います。
なぜならば変数を利用するとき、これだけ考える要素があるからです。
・変数の登録コスト
-登録場所(ID何番を使うか、前後の並びにどう配慮するか)
-名称
・変数の呼び出しコスト
-\v[]〜と入力する手間
一方で変数にしておけばよかったと思うのは、次のような場合。
・数は少ないが、どこに使ったかわからない値
色々な場所に設定していて、マップID,イベントIDを探し当てられない…
これがバグの元になります。
また変数自体も命名をしくじると「これなんの変数だっけ」となります。
以上をふまえ、変数についての考えをまとめます。
・変数を利用した方が良い場合
-2つ以上
-離れたMAPID,イベントIDで利用
※一元管理だけではなく、探すコストも判断基準に入れます
・変数は分かりやすく管理する
1.変数名から目的がわかるように命名する
-Chapter2で利用する変数ならC2_hogehoge
-ゲーム内全般で利用するならSys_hoghogeなど
2.コモンイベントの中にまとめる
コモンイベントにわかりやすい名前をつけたうえで、先の変数をまとめます
コモンイベント名はデータベースからCtrl+Fで検索ができるので、見出し代わりになります
【追記】
・トリアコンタンさんのイベントテンプレート、イベント動的生成プラグインが変数に対応していることがわかりました
1.イベントテンプレートでコピー元イベントを作成
2.動的生成のプラグインコマンドで1を呼び出す
例.
* ERS_ランダム生成 1 1 2 3 5 4 # イベントID[1]のイベントを下記の条件(※)で配置
* ERS_MAKE_RANDOM 1 1 2 3 5 4 # 同上
2のプラグインコマンドの各種値(例で挙げると1 2 3 5 4 )部分が変数に対応しているとのこと。
地形タグ、リージョンに変数を割り当てれば一元管理が可能になります。
テンプレートイベントプラグイン
https://triacontane.blogspot.com/2016/06/blog-post_25.html
イベント動的生成
https://triacontane.blogspot.com/2016/08/blog-post.html
◆◇◆◇
変数はこのような作品管理のほか、プレイ情報やゲームデータも格納できます。
そしてコモンイベントをラベル代わりに使うことで、制作の効率化は進みます。
スクリプトを活用することで変数に格納する情報は大幅に広がります。
・スクリプトで取得可能な情報一覧
執筆:トリアコンタンさん
https://docs.google.com/spreadsheets/d/1rOIzDuhLC6IqJPEFciYOmXWL_O7X9-hMValMs7DpWCk/edit#gid=0
これらを応用すれば、戦闘回数をもとにゲーム側で難易度を自動調整する機能も実装できます。
(それが良いかは別として)
プレイヤーの操作→反応、これがゲームのコアな面白さの一部だと思うので、この辺りにも注目したいところ。
共通作業をいかにまとめるか
プレイ情報をどのように活かすか
これらは制作を楽しくする秘訣かもしれません。
2018年07月23日
RPGツクールMVでm4aを省略する方法
◆RPGツクールMVでm4aを省略する方法
RPGツクールMVでm4a形式のファイルを省略可能にするプラグインが公開されました。
多くの方に恩恵のある情報なので、さっそくシェアさせていただきます。
■m4a形式のファイルとは
m4a形式は音楽ファイルの種類を指します。
RPGツクールMVでは、PCやMacではogg形式、スマートフォンプレイ時にm4a形式のファイルを利用する仕組みが採用されています。
そして今回ご紹介するプラグインを使うことで、m4a形式をogg形式で代用できるようになります。
■プラグイン
制作者:
OggOnly.js/くらむぼん様
stbvorbis.js/HajimeHoshi様
stbvorbis_asm.js/HajimeHoshi様
@oggファイルだけで音声を再生するプラグイン
https://raw.githubusercontent.com/krmbn0576/rpgmakermv/master/js/plugins/OggOnly.js
Aoggデコーダー1
https://raw.githubusercontent.com/krmbn0576/rpgmakermv/master/js/plugins/stbvorbis.js
Boggデコーダー2
https://raw.githubusercontent.com/krmbn0576/rpgmakermv/master/js/plugins/stbvorbis_asm.js
■利用方法
1.@ABをダウンロード(リンクを右クリックでそのまま「名前を付けて保存」)
2.プロジェクトフォルダの\js\pluginsに@ABを保存
3.プラグイン管理で@をON,ABは何もしない
これでm4a音源を使わずにogg音源が利用されるようになります。
動作確認がとれたなら\audio配下のm4aファイルをバックアップフォルダに移動してみてください。
※今回のような作業では、削除ではなく移動で復元できるようにした方が良いです
■メリット
・メリット1:音楽ファイルの素材が半分不要になる
以下は私のとあるプロジェクトの場合です。
m4a:39.8MB★不要になる
ogg:44.2MB
新規プロジェクトの場合も調べてみました。
m4a:49.1MB★不要になる
ogg:79.6MB
作者、PCプレイヤーの方、サービス運営側全体にとっての恩恵です。
強いていうのなら、m4aの方がoggより軽量である場合、スマートフォンのプレイヤーにとっては差分だけ重たくなります。
以下は私のプロジェクトの例です。
[ファイルA]
m4a:654KB
ogg:680KB
[ファイルB]
m4a:1159KB
ogg:1524KB
ちなみにこの差は体感できるほどではありません。
・メリット2:スマートフォン再生時にループずれが防げる
m4a音源を軽量化するとループタグというループ情報が崩れてしまう事象があり、
作品によってはループ再生ができなくなっていました。
このプラグインを利用することで同問題の心配がなくなります。
■最後に
制作者のくらむぼんさんは国内フォーラムのモデレーターを務めていらっしゃる方で、他にも有機的なプラグインを公開されています。
よろしければ彼の他のプロダクトにもご注目ください。
くらむぼんさんTwitterアカウント
https://twitter.com/krmbn0576
WEBページ
https://krmbn0576.github.io/rpgmakermv/homepage.html
いつか音楽ファイルのファイル形式やサイズではなく、音質で選べる時代が来るといいですよね。
これは音楽好きのゲーム制作者としての密かな願いです。
RPGツクールMVでm4a形式のファイルを省略可能にするプラグインが公開されました。
多くの方に恩恵のある情報なので、さっそくシェアさせていただきます。
■m4a形式のファイルとは
m4a形式は音楽ファイルの種類を指します。
RPGツクールMVでは、PCやMacではogg形式、スマートフォンプレイ時にm4a形式のファイルを利用する仕組みが採用されています。
そして今回ご紹介するプラグインを使うことで、m4a形式をogg形式で代用できるようになります。
■プラグイン
制作者:
OggOnly.js/くらむぼん様
stbvorbis.js/HajimeHoshi様
stbvorbis_asm.js/HajimeHoshi様
@oggファイルだけで音声を再生するプラグイン
https://raw.githubusercontent.com/krmbn0576/rpgmakermv/master/js/plugins/OggOnly.js
Aoggデコーダー1
https://raw.githubusercontent.com/krmbn0576/rpgmakermv/master/js/plugins/stbvorbis.js
Boggデコーダー2
https://raw.githubusercontent.com/krmbn0576/rpgmakermv/master/js/plugins/stbvorbis_asm.js
■利用方法
1.@ABをダウンロード(リンクを右クリックでそのまま「名前を付けて保存」)
2.プロジェクトフォルダの\js\pluginsに@ABを保存
3.プラグイン管理で@をON,ABは何もしない
これでm4a音源を使わずにogg音源が利用されるようになります。
動作確認がとれたなら\audio配下のm4aファイルをバックアップフォルダに移動してみてください。
※今回のような作業では、削除ではなく移動で復元できるようにした方が良いです
■メリット
・メリット1:音楽ファイルの素材が半分不要になる
以下は私のとあるプロジェクトの場合です。
m4a:39.8MB★不要になる
ogg:44.2MB
新規プロジェクトの場合も調べてみました。
m4a:49.1MB★不要になる
ogg:79.6MB
作者、PCプレイヤーの方、サービス運営側全体にとっての恩恵です。
強いていうのなら、m4aの方がoggより軽量である場合、スマートフォンのプレイヤーにとっては差分だけ重たくなります。
以下は私のプロジェクトの例です。
[ファイルA]
m4a:654KB
ogg:680KB
[ファイルB]
m4a:1159KB
ogg:1524KB
ちなみにこの差は体感できるほどではありません。
・メリット2:スマートフォン再生時にループずれが防げる
m4a音源を軽量化するとループタグというループ情報が崩れてしまう事象があり、
作品によってはループ再生ができなくなっていました。
このプラグインを利用することで同問題の心配がなくなります。
■最後に
制作者のくらむぼんさんは国内フォーラムのモデレーターを務めていらっしゃる方で、他にも有機的なプラグインを公開されています。
よろしければ彼の他のプロダクトにもご注目ください。
くらむぼんさんTwitterアカウント
https://twitter.com/krmbn0576
WEBページ
https://krmbn0576.github.io/rpgmakermv/homepage.html
いつか音楽ファイルのファイル形式やサイズではなく、音質で選べる時代が来るといいですよね。
これは音楽好きのゲーム制作者としての密かな願いです。
2018年07月20日
MAPデータが破損した場合の対処方法
◆MAPデータが破損した場合の対処方法
バージョン1.6.0でMAPデータが破損する事例がありましたが、対処方法をまとめたいと思います。
■解説記事:
ツクールMVで突然マップが読み込まれない・表示されない時の対処法
執筆者:しぐれん様
https://qiita.com/Sigureya/items/db9b2687e42a81e854f8
mapinfos.jsonの編集が対処となります。
以下はその対処方法のツールです。
■対処方法
修復ツール
https://mvmap.splendith.com/
修復ツール利用方法(英語)
https://mvmap.splendith.com/why
[解説]
準備:
プロジェクトフォルダ→dataフォルダのバックアップ
手順:
1.以下サイトにプロジェクトフォルダ→dataフォルダ→Mapinfos.jsonをアップロード
https://mvmap.splendith.com/
2.展開先の画面でドラッグ&ドロップで階層を修正する
・エディタで見えないMapもこの画面であれば確認できる可能性があります
3.「Download here」でMapinfos.jsonをダウンロード、上書き保存することで復旧できる可能性があります。
念のため、正常動作を確認できるまでバックアップファイルはお取り置きください。
◆最後に
1.6.0に関わらず、強制電源断や意図しないソフトトラブルでデータ破損は発生する可能性があります。
日頃からデータのバックアップは推奨いたします。
以下、オススメの方法です。
■参考:
RPGツクールMVでプロジェクトが突然読み込めなくなったときの対処法
執筆者:トリアコンタン様
https://triacontane.blogspot.com/2018/04/rpgmv.html
謝辞:kido様、しぐれん様、トリアコンタン様
バージョン1.6.0でMAPデータが破損する事例がありましたが、対処方法をまとめたいと思います。
■解説記事:
ツクールMVで突然マップが読み込まれない・表示されない時の対処法
執筆者:しぐれん様
https://qiita.com/Sigureya/items/db9b2687e42a81e854f8
mapinfos.jsonの編集が対処となります。
以下はその対処方法のツールです。
■対処方法
修復ツール
https://mvmap.splendith.com/
修復ツール利用方法(英語)
https://mvmap.splendith.com/why
[解説]
準備:
プロジェクトフォルダ→dataフォルダのバックアップ
手順:
1.以下サイトにプロジェクトフォルダ→dataフォルダ→Mapinfos.jsonをアップロード
https://mvmap.splendith.com/
2.展開先の画面でドラッグ&ドロップで階層を修正する
・エディタで見えないMapもこの画面であれば確認できる可能性があります
3.「Download here」でMapinfos.jsonをダウンロード、上書き保存することで復旧できる可能性があります。
念のため、正常動作を確認できるまでバックアップファイルはお取り置きください。
◆最後に
1.6.0に関わらず、強制電源断や意図しないソフトトラブルでデータ破損は発生する可能性があります。
日頃からデータのバックアップは推奨いたします。
以下、オススメの方法です。
■参考:
RPGツクールMVでプロジェクトが突然読み込めなくなったときの対処法
執筆者:トリアコンタン様
https://triacontane.blogspot.com/2018/04/rpgmv.html
謝辞:kido様、しぐれん様、トリアコンタン様
2018年05月08日
【ツクールMV修正情報】メニューとアイテム画面の連続切り替えで操作不能になる(シーン遷移問題)の解決
この頃は電車の中でうたた寝してしまうくらいお疲れ……じゃない、充実した毎日を送っています。
月末には自作品の近況とか、面白かった作品のお話に触れられたらと思います。
さて今日はRPGツクールMVで1点既知のトラブルが解消されたので共有です。
トラブル内容:
メニューとアイテム画面の連続切り替えで操作不能になる
https://fanblogs.jp/tabirpglab/archive/1072/0
詳細については上記の過去記事をご覧ください。
意図的にメニュー画面でEnter⇔ESCを繰り返さない限り、発生頻度は低そうです。
対策:
RPGツクールMV1.6.1β(2018/5/8版)の適用
【お知らせ】RPGツクールMV:バージョン1.6.1βテスト版 配信開始
https://goo.gl/8NWSNE
こちらのリンク先でSteam版1.6.1の適用方法が紹介されています
経緯:
・バージョン1.6.0でも同問題のシーン遷移対策が含まれておりました。
しかしその対策はコアスクリプト外のプラグインに対する柔軟性が低く、YEPさんのItemCoreなどアイテム画面遷移を伴うプラグインを使用した際に影響が発生しておりました。1.6.0対策版でもある1.5.2(1.6.0は別問題も含め影響が大きかったのか公開停止。その後継として公開された1.5.2ではシーン遷移対策はなされていませんでした。
・今回1.6.1βの修正は1.6.0とは別のシーン遷移対策が施されており、1.6.0のプラグイン干渉を見送った方にとっては期待できそうです。
ただ別対策=別の問題が発生する可能性もあるわけで、その辺りは慎重に見極めなければいけません。
1.6.1もまだβかつWindowsが対象のようなので、βの外れた正式版を待つのも一案でしょう。
あっさり風味ですみません。ではでは。
月末には自作品の近況とか、面白かった作品のお話に触れられたらと思います。
さて今日はRPGツクールMVで1点既知のトラブルが解消されたので共有です。
トラブル内容:
メニューとアイテム画面の連続切り替えで操作不能になる
https://fanblogs.jp/tabirpglab/archive/1072/0
詳細については上記の過去記事をご覧ください。
意図的にメニュー画面でEnter⇔ESCを繰り返さない限り、発生頻度は低そうです。
対策:
RPGツクールMV1.6.1β(2018/5/8版)の適用
【お知らせ】RPGツクールMV:バージョン1.6.1βテスト版 配信開始
https://goo.gl/8NWSNE
こちらのリンク先でSteam版1.6.1の適用方法が紹介されています
経緯:
・バージョン1.6.0でも同問題のシーン遷移対策が含まれておりました。
しかしその対策はコアスクリプト外のプラグインに対する柔軟性が低く、YEPさんのItemCoreなどアイテム画面遷移を伴うプラグインを使用した際に影響が発生しておりました。1.6.0対策版でもある1.5.2(1.6.0は別問題も含め影響が大きかったのか公開停止。その後継として公開された1.5.2ではシーン遷移対策はなされていませんでした。
・今回1.6.1βの修正は1.6.0とは別のシーン遷移対策が施されており、1.6.0のプラグイン干渉を見送った方にとっては期待できそうです。
ただ別対策=別の問題が発生する可能性もあるわけで、その辺りは慎重に見極めなければいけません。
1.6.1もまだβかつWindowsが対象のようなので、βの外れた正式版を待つのも一案でしょう。
あっさり風味ですみません。ではでは。
2018年04月30日
実験:スイッチの判定処理について
◆実験:スイッチの判定処理について
スイッチの判定処理について負荷の少ない方法を調べたときの話です。
取り組み上、プラグイン、スクリプトを使用しない前提で書いている記事なので、コラム的にご覧ください。
対策は結論がでているので、記事末尾の参考記事をぜひ。
同一マップ限定で何かの処理をスイッチONで開始(例.エンカウント0、光源処理、宝箱ポップ、BGM変更)マップ切り替え時にスイッチをOFFにして初期化をするということをやっていました。
座標1.1にこんなイベントを設置するといった具合ですね。
◆スイッチの操作:#0341 test1 = OFF
◆イベントの一時消去
トリガー:自動実行
たった1つならまだしも複数の処理(スイッチ)をON→OFFにする必要が生じた場合、次の2通りが一般的ではないでしょうか。
@一斉OFF
◆スイッチの操作:#0341..0350 = OFF
◆イベントの一時消去
A条件分岐でONの場合のみOFF
◆条件分岐:test1がON
◆スイッチの操作:#0341 test1 = OFF
◆
:分岐終了
◆条件分岐:test2がON
◆スイッチの操作:#0342 test2 = OFF
◆
:分岐終了
…以下続く
◆イベントの一時消去
この場合、どちらが処理負荷が低いのか試してみました。
結論としては、マップ切り替え時にはマップ初期化処理でイベントチェックが走るため変わらないとのことでした(ご回答くださったしぐれん様に感謝です)。
テストプレイ中にメニュー画面の切り替えをすると更新内容を即反映できるのは、この処理のためだったのですね。
逆に言うと、画面を切り替えない(メニュー画面の呼び出しのようなシーン遷移含む)
スイッチOFF時の判定なら、条件分岐の分軽くなる可能性はありますが、その場面はおそらく限定的。
それならば実装作業のコストを考えてパターン@で管理した方が早いという話でした。
予備知識として以下ご参考まで。
・スイッチON/OFF、変数の変化は同一MAP内の全イベントチェックを走らせる
1.スイッチ=Game_Switches Classの変更、Game_Variables Classの変更がsetValue() で格納される
2.1の度にGame_Map Classの refresh() =更新処理処理が走る
・スイッチ、変数の値を直接指定することで全イベントチェックを回避することは可能
-具体的には $gameVariables._data や $gameSwithes._data の値を変更する
解説や取り組まれた好例は次の記事が参考になります。
並列処理でスイッチや変数を操作すると重くなる【ツクールMV】(パラドレ様)
https://paradre.com/%E4%B8%A6%E5%88%97%E5%87%A6%E7%90%86%E3%81%A7%E3%82%B9%E3%82%A4%E3%83%83%E3%83%81%E3%82%84%E5%A4%89%E6%95%B0%E3%82%92%E6%93%8D%E4%BD%9C%E3%81%99%E3%82%8B%E3%81%A8%E9%87%8D%E3%81%8F%E3%81%AA%E3%82%8B
【ツクールMV Tips】ゲーム動作軽量化に潜むsetValueと$gameMap.refresh()の罠(terunon様)
http://ch.nicovideo.jp/terunon/blomaga/ar988845
スイッチの判定処理について負荷の少ない方法を調べたときの話です。
取り組み上、プラグイン、スクリプトを使用しない前提で書いている記事なので、コラム的にご覧ください。
対策は結論がでているので、記事末尾の参考記事をぜひ。
同一マップ限定で何かの処理をスイッチONで開始(例.エンカウント0、光源処理、宝箱ポップ、BGM変更)マップ切り替え時にスイッチをOFFにして初期化をするということをやっていました。
座標1.1にこんなイベントを設置するといった具合ですね。
◆スイッチの操作:#0341 test1 = OFF
◆イベントの一時消去
トリガー:自動実行
たった1つならまだしも複数の処理(スイッチ)をON→OFFにする必要が生じた場合、次の2通りが一般的ではないでしょうか。
@一斉OFF
◆スイッチの操作:#0341..0350 = OFF
◆イベントの一時消去
A条件分岐でONの場合のみOFF
◆条件分岐:test1がON
◆スイッチの操作:#0341 test1 = OFF
◆
:分岐終了
◆条件分岐:test2がON
◆スイッチの操作:#0342 test2 = OFF
◆
:分岐終了
…以下続く
◆イベントの一時消去
この場合、どちらが処理負荷が低いのか試してみました。
結論としては、マップ切り替え時にはマップ初期化処理でイベントチェックが走るため変わらないとのことでした(ご回答くださったしぐれん様に感謝です)。
テストプレイ中にメニュー画面の切り替えをすると更新内容を即反映できるのは、この処理のためだったのですね。
逆に言うと、画面を切り替えない(メニュー画面の呼び出しのようなシーン遷移含む)
スイッチOFF時の判定なら、条件分岐の分軽くなる可能性はありますが、その場面はおそらく限定的。
それならば実装作業のコストを考えてパターン@で管理した方が早いという話でした。
予備知識として以下ご参考まで。
・スイッチON/OFF、変数の変化は同一MAP内の全イベントチェックを走らせる
1.スイッチ=Game_Switches Classの変更、Game_Variables Classの変更がsetValue() で格納される
2.1の度にGame_Map Classの refresh() =更新処理処理が走る
・スイッチ、変数の値を直接指定することで全イベントチェックを回避することは可能
-具体的には $gameVariables._data や $gameSwithes._data の値を変更する
解説や取り組まれた好例は次の記事が参考になります。
並列処理でスイッチや変数を操作すると重くなる【ツクールMV】(パラドレ様)
https://paradre.com/%E4%B8%A6%E5%88%97%E5%87%A6%E7%90%86%E3%81%A7%E3%82%B9%E3%82%A4%E3%83%83%E3%83%81%E3%82%84%E5%A4%89%E6%95%B0%E3%82%92%E6%93%8D%E4%BD%9C%E3%81%99%E3%82%8B%E3%81%A8%E9%87%8D%E3%81%8F%E3%81%AA%E3%82%8B
【ツクールMV Tips】ゲーム動作軽量化に潜むsetValueと$gameMap.refresh()の罠(terunon様)
http://ch.nicovideo.jp/terunon/blomaga/ar988845