ページ 3 / 4
Re: 変数を万進法で表示させたい
Posted: 2020年11月08日(日) 18:43
by jp_asty
変数に入っている値がbigInt型になっていないために起こっているエラーです。
bigInt対応前までは変数の値はNumber型なので、
1.プラグインのバージョンがbigInt対応前で変数に値を設定してセーブ。
2.プラグインをbigInt対応バージョンに更新
3.bigInt対応前のデータをロードして変数の値を表示
このような操作を行った場合エラーになります。
基本的にこのようなケースは想定していません。
どうしてもそのセーブデータを使用する必要がありますか・・?
Re: 変数を万進法で表示させたい
Posted: 2020年11月08日(日) 20:47
by chiko☆ミ
新規プロジェクトで再現出来たのでおそらく原因が分かりました。ご教授願います。。m(_ _)m
◆変数の操作:#0001 = Math.floor(($gameVariables.value(1)+5)/3)
この様な感じで、BigIntに指定してる変数の計算の中で小数点が出た場合に
Math.floor()で整数に直していたのですが、どうやらこの様な操作を行った後のセーブデータが駄目っぽいです。
ゲームを続けている間はエラーにならないのでこれでいいのかと思っていたのですが…
どうしたらいいんでしょうか?
Re: 変数を万進法で表示させたい
Posted: 2020年11月09日(月) 00:29
by jp_asty
bigIntは少数点以下を持ちません。整数です。
小数部が捨てられることに関しては以前の投稿で承認を得ているはずです。
また細かいですが組み込み型のBigIntではなく、外部ライブラリのbigIntです。
計算に関しては基本は変数の操作の加算や除算などを通して行って下さい。
スクリプトで行う場合は、
https://www.npmjs.com/package/big-integer の記述に従って下さい。
例えば
◆変数の操作:#0001 = Math.floor(($gameVariables.value(1)+5)/3)
は
◆変数の操作:#0001 = $gameVariables.value(1).add(5).divide(3)
になります。
Re: 変数を万進法で表示させたい
Posted: 2020年11月09日(月) 01:49
by chiko☆ミ
返信ありがとうございます。
少し変えるとエラーが出なくなったりしてずっと探っていたのですが、
先ほどのレスではかなり説明不足でした。。
だいぶ条件が絞れたのでお伝えします。
少数の出る計算等はあまり関係なく
ロード直後に、変数の操作前に万進法で表示をしようとするとエラーになるようです。
お教え頂いた正しい記述
◆変数の操作:#0001 = $gameVariables.value(1).add(5).divide(3)
に変えてみても、今度は変数の操作が先でも表示が先でもエラーになりました。
余りの出る除算が駄目なの?と思って
◆変数の操作:#0001 = $gameVariables.value(1).add(5)
だけにしてみても、エラーになりました。
◆変数の操作:#0001 = $gameVariables.value(1)+5
だと、エラーは吐きませんが、ロード直後の計算だけおかしくなりました。
変数が20の時にセーブし、ロード直後の計算で205になり、その後からまた210,215と増えました。
これは、bigInt型の変数がセーブデータでは文字列型として保存されてしまうという事でしょうか…?
何か対策はありますか?
小数部が捨てられることに関しては了承してますので問題ないです。
Re: 変数を万進法で表示させたい
Posted: 2020年11月09日(月) 06:27
by jp_asty
ツクールmvのコアで定義されている
JsonEx.stringify()を通すとbigIntが"undeined"になってしまうようです。
暫定処置としてセーブ時はbigInt→Stringの変換を行い、ロード時はString→bigIntの変換を行うようにしました。
https://raw.githubusercontent.com/ste0/ ... nshinho.js
(右クリックで名前を付けて保存で保存して下さい)
Re: 変数を万進法で表示させたい
Posted: 2020年11月09日(月) 20:00
by chiko☆ミ
bigIntに指定した変数のうち1つでもまだ値を入れてない変数があるとセーブに失敗します。
空の変数に対する処理を加えて頂けないでしょうかm(_ _)m
Re: 変数を万進法で表示させたい
Posted: 2020年11月09日(月) 21:37
by jp_asty
Re: 変数を万進法で表示させたい
Posted: 2020年11月09日(月) 22:15
by chiko☆ミ
セーブ後にそのままゲームを続けるとエラーがでます><
Re: 変数を万進法で表示させたい
Posted: 2020年11月09日(月) 22:21
by jp_asty
エラーの内容を教えて下さい。
Re: 変数を万進法で表示させたい
Posted: 2020年11月09日(月) 22:34
by chiko☆ミ
TypeError: $gameVariables.value(...).add is not a function
セーブ後、マップに戻って変数の操作をしようとするとエラーになります。
Stringのままになってないですか…?