【解決済み】全ての変数を特定のタイミングで初期化したい(一部の例外は除く)

4031kfep53
記事: 9
登録日時: 2022年12月17日(土) 07:51

【解決済み】全ての変数を特定のタイミングで初期化したい(一部の例外は除く)

投稿記事by 4031kfep53 » 2023年2月28日(火) 10:04

質問したいことはタイトルの通りなのですが、詳細は以下になります。

*詳細*
ローグライクカードゲームを作っていて、アイテム(カード)のコストをゲーム内変数で管理しています。
エネミーとのバトルシーンの中で、各カードのコスト(変数)が変化することがありますが、
バトルシーンが終わったら、これらの変数をすべて初期化したいと考えています。
スクリプトで「$gameVariables.clear();」を実行すれば全変数を初期化できますが、
初期化したくない変数まで初期化されてしまい、困っています。
初期化したくない変数はかなりの数(ローグライク要素が多くあるため)あり、
また初期化したい変数もかなりの数(カード1枚に対して1つの変数が割り当てられるため)あるのですが、
なにか良い方法はありませんでしょうか?
また変数の最小値・最大値は0~9999程度を想定しています。

以下はゲームのイメージです。
コスト0は表示できた.png
最後に編集したユーザー 4031kfep53 on 2023年3月04日(土) 16:44 [ 編集 1 回目 ]

アバター
しぐれん
記事: 973
登録日時: 2017年3月28日(火) 22:22
連絡を取る:

Re: 全ての変数を特定のタイミングで初期化したい(一部の例外は除く)

投稿記事by しぐれん » 2023年2月28日(火) 15:39

コモンイベントで初期化処理を作成します。
その上で、何らかの方法でバトル終了時にコモンイベントを呼び出します。
簡単で確実なのはこれです。
現在、プラグイン依頼はお休み中です。
4031kfep53
記事: 9
登録日時: 2022年12月17日(土) 07:51

Re: 全ての変数を特定のタイミングで初期化したい(一部の例外は除く)

投稿記事by 4031kfep53 » 2023年3月01日(水) 10:17

しぐれん様、ご返信ありがとうございます!

説明不足で申し訳ないです!
しぐれん様のアドバイスの通り、『バトル終了後に変数を初期化するコモンイベントを呼ぶ』ところまでは一応できています!

ただ初期化のために『$gameVariables.clear();』を使っているため、初期化したくない変数まですべて初期化されてしまい、困っている状況です。
タイトルにある『(一部の例外は除く)』の部分が解決できていない形になります。
現時点でも初期化すべき変数が200個を超えているため、手動で一つ一つ初期化するのは辛いです。
どうにかして変数を退避して『$gameVariables.clear();』で全初期化するしかないかな?と考えているのですが、
良い方法が思いつきませんでした。

分かりにくい説明となってしまい申し訳ないです。アドバイスありがとうございます。
chro
記事: 86
登録日時: 2021年2月14日(日) 11:26

Re: 全ての変数を特定のタイミングで初期化したい(一部の例外は除く)

投稿記事by chro » 2023年3月01日(水) 15:24

通常は変数を連番で使用して、変数の操作で1~100までの変数を0で初期化します。

連番などではない場合は、変数名で判断するのはいかがでしょうか。
変数名に、指定した文字列が含まれる場合に、その変数のみ0で初期化されます。


コード: 全て選択

var resetKeywords = ['[R]',  '自動初期化',  'カードリセット']; // ''で文字列を囲み、,で区切る
$dataSystem.variables.forEach((name, id) => {
  resetKeywords.forEach(s => name. indexOf(s) !== -1 && $gameVariables.setValue(id, 0));
});

スクリプトの変数名の例:
[R]カード番号1
カード番号2_自動初期化
4031kfep53
記事: 9
登録日時: 2022年12月17日(土) 07:51

Re: 全ての変数を特定のタイミングで初期化したい(一部の例外は除く)

投稿記事by 4031kfep53 » 2023年3月04日(土) 16:44

chro様 ご回答ありがとうございます!
変数名を使うのは考えていませんでした。ありがとうございます。

chro様の案で対応してみたいと思います。
ありがとうございました!

“MZ:質問” へ戻る