【解決】変数で配列を利用して、スクリプトを動かしたい

アバター
ムノクラ
記事: 1215
登録日時: 2018年2月23日(金) 11:41
連絡を取る:

【解決】変数で配列を利用して、スクリプトを動かしたい

投稿記事by ムノクラ » 2019年5月28日(火) 19:56

下記の要望を読んで、スクリプトの配列とコモンイベントの2つで解決できるんじゃないか?と思って挑戦しました。
変数操作→コモン呼び出しを一行で行うコマンド
viewtopic.php?f=49&t=7870

しかし、上手くいきません。
Syntax errorになってしまいます。

下記を参考に組んでみました。

RPGツクールMVの変数で遊ぶ - drhaisai_blog
http://drhaisai.hatenablog.com/entry/2017/12/11/003518

SS01.png

SS02.png

SS03.png


コモンイベント1:プラグイン代行の中身は下記です。

コード: 全て選択

$gameVariables.setValue($gameVariables.value($gameVariables.value(1)[0]),$gameVariables.value($gameVariables.value(1)[0])+$gameVariables.value(1)[1]);
this.setupChild($dataCommonEvents[$gameVariables.value(1)[2]].list, 0);


どなたか後学のためにご指導ください。
最後に編集したユーザー ムノクラ on 2019年5月28日(火) 22:18 [ 編集 1 回目 ]

***
:!: 質問前に、過去ログを検索しましょう!
;) 質問が解決できたら、スレッドタイトルに【解決】を追加しましょう!
8-) 自己解決した方は、解決した方法を書きましょう!<後人の為です!

▼プラグイン投稿・検索
https://plugin.fungamemake.com

▼返信がもらいやすい質問の仕方
https://fungamemake.com/archives/8079

▼エラーの詳細なメッセージを見る方法
https://fungamemake.com/archives/12097
さすらいのなんちゃら
記事: 17
登録日時: 2017年7月24日(月) 17:23

Re: 変数で配列を利用して、スクリプトを動かしたい

投稿記事by さすらいのなんちゃら » 2019年5月28日(火) 20:09

配列にしたい変数がカンマ区切りになってないと思います。
アバター
ムノクラ
記事: 1215
登録日時: 2018年2月23日(金) 11:41
連絡を取る:

Re: 変数で配列を利用して、スクリプトを動かしたい

投稿記事by ムノクラ » 2019年5月28日(火) 20:17

さすらいのなんちゃら さんが書きました:配列にしたい変数がカンマ区切りになってないと思います。

おぉ、抜けていました!
SS04.png
SS04.png (27.13 KiB) 閲覧数: 2115 回

追加したところ、エラーも何も言わなくなりました。

///↓勘違い↓///
SS05.png

と追加してみたら、変数11が0と返ってくるので、スクリプトが動いていないと思われます。
///↑勘違い↑///

実験で消していたコモンイベントのスクリプトがない状態でテストしていました。
コモンイベントは動きましたが、変数は0でした。

変数の処理に文法的に無理はないのでしょうか?
配列から取った数字のつもりが、文字列扱いされているとか…
最後に編集したユーザー ムノクラ on 2019年5月28日(火) 20:25 [ 編集 1 回目 ]
***
:!: 質問前に、過去ログを検索しましょう!
;) 質問が解決できたら、スレッドタイトルに【解決】を追加しましょう!
8-) 自己解決した方は、解決した方法を書きましょう!<後人の為です!

▼プラグイン投稿・検索
https://plugin.fungamemake.com

▼返信がもらいやすい質問の仕方
https://fungamemake.com/archives/8079

▼エラーの詳細なメッセージを見る方法
https://fungamemake.com/archives/12097
astral
記事: 106
登録日時: 2018年11月14日(水) 00:21
連絡を取る:

Re: 変数で配列を利用して、スクリプトを動かしたい

投稿記事by astral » 2019年5月28日(火) 20:19

こんばんは。
何がうまくいかなかったか書いてもらわないとわかりにくいですが、
まず配列は,区切りなので、['11', '-10', '2']としないとエラーとなっているはずです。

>$gameVariables.value($gameVariables.value(1)[0])+$gameVariables.value(1)[1]
'11'は文字列の扱いなので、 '11' + '-10'で計算した場合は文字列の結合で'11-10'となります。
数値の場合は、[11, -10, 2]です

あとこれだと変数11番の値に対して-10をするという意味になるのですが意図した挙動でしょうか。
アバター
ムノクラ
記事: 1215
登録日時: 2018年2月23日(金) 11:41
連絡を取る:

Re: 変数で配列を利用して、スクリプトを動かしたい

投稿記事by ムノクラ » 2019年5月28日(火) 20:28

astral さんが書きました:こんばんは。
何がうまくいかなかったか書いてもらわないとわかりにくいですが、
まず配列は,区切りなので、['11', '-10', '2']としないとエラーとなっているはずです。

>$gameVariables.value($gameVariables.value(1)[0])+$gameVariables.value(1)[1]
'11'は文字列の扱いなので、 '11' + '-10'で計算した場合は文字列の結合で'11-10'となります。
数値の場合は、[11, -10, 2]です

あとこれだと変数11番の値に対して-10をするという意味になるのですが意図した挙動でしょうか。


配列を,区切りにすることでエラーは出なくなりました。
変数11番から-10して、結果的に-10という答えを出させるつもりで作っています。

文字列扱いになってしまうのですね。
でも、戻ってきた変数11番の値は0でした。

クォーテーションを外しても結果は同じでした。

でも、先の投稿ミスを修正したように、コモンイベントの番号としては動いているようです。
コモンイベントの番号は文字列でも合っていれば動いてしまうのですかね?<JavaScript仕様的に

いっそ、変数を介さないで、スクリプトで配列を指定したほうが良いのでしょうか?

var array = [11, -10, 2];

https://www.sejuku.net/blog/31746
***
:!: 質問前に、過去ログを検索しましょう!
;) 質問が解決できたら、スレッドタイトルに【解決】を追加しましょう!
8-) 自己解決した方は、解決した方法を書きましょう!<後人の為です!

▼プラグイン投稿・検索
https://plugin.fungamemake.com

▼返信がもらいやすい質問の仕方
https://fungamemake.com/archives/8079

▼エラーの詳細なメッセージを見る方法
https://fungamemake.com/archives/12097
astral
記事: 106
登録日時: 2018年11月14日(水) 00:21
連絡を取る:

Re: 変数で配列を利用して、スクリプトを動かしたい

投稿記事by astral » 2019年5月28日(火) 20:49

>$gameVariables.setValue($gameVariables.value($gameVariables.value(1)[0]),$gameVariables.value($gameVariables.value(1)[0])+$gameVariables.value(1)[1]);

まずsetValueの変数番号の指定が、
>$gameVariables.value($gameVariables.value(1)[0])
となり、この場合変数11番の値であるので、画像内では変数11番になにか値を代入する記述がないので、変数11番は初期状態の0のままなので正常です。

変数11番が-10になる想定なら、こういうことでしょうか。

コード: 全て選択

$gameVariables.setValue($gameVariables.value(1)[0], $gameVariables.value($gameVariables.value(1)[0])+$gameVariables.value(1)[1]);

配列の数値は内部的に文字列に変換されているので、
$dataCommonEvents['2']にするのは問題ないです。
アバター
ムノクラ
記事: 1215
登録日時: 2018年2月23日(金) 11:41
連絡を取る:

Re: 変数で配列を利用して、スクリプトを動かしたい

投稿記事by ムノクラ » 2019年5月28日(火) 21:40

astral さんが書きました:変数11番が-10になる想定なら、こういうことでしょうか。

コード: 全て選択

$gameVariables.setValue($gameVariables.value(1)[0], $gameVariables.value($gameVariables.value(1)[0])+$gameVariables.value(1)[1]);



変数へ代入する配列を
[11, -10, 2]
として、いただいたスクリプトに差し替えたところ、変数11番に-10が返ってきました。

希望の動きなのですが、なんだかしっくり来ません。
というのは、
自分が
$gameVariables.value($gameVariables.value(1)[0])
と書いたところが、正しくは

$gameVariables.value(1)[0]
というように、入れ子が多いということのようですが、動いている記述だと、変数1[0]というように見えるのですが、そういうものだと理解するのがしぜんということでしょうか。
JavaScriptをもっと深く理解すれば、当たり前のことなんでしょうか?

このまま、変数を使わないで、
スクリプト:var array = [11, -10, 2];
で行った場合のスクリプトも教えていただいてもよろしいでしょうか?
***
:!: 質問前に、過去ログを検索しましょう!
;) 質問が解決できたら、スレッドタイトルに【解決】を追加しましょう!
8-) 自己解決した方は、解決した方法を書きましょう!<後人の為です!

▼プラグイン投稿・検索
https://plugin.fungamemake.com

▼返信がもらいやすい質問の仕方
https://fungamemake.com/archives/8079

▼エラーの詳細なメッセージを見る方法
https://fungamemake.com/archives/12097
さすらいのなんちゃら
記事: 17
登録日時: 2017年7月24日(月) 17:23

Re: 変数で配列を利用して、スクリプトを動かしたい

投稿記事by さすらいのなんちゃら » 2019年5月28日(火) 21:55

代入先の変数番号が$gameVariables.value($gameVariables.value(1)[0])→変数番11→0になってるからおかしな事になっているのでは?
アバター
ムノクラ
記事: 1215
登録日時: 2018年2月23日(金) 11:41
連絡を取る:

Re: 変数で配列を利用して、スクリプトを動かしたい

投稿記事by ムノクラ » 2019年5月28日(火) 21:59

さすらいのなんちゃら さんが書きました:代入先の変数番号が$gameVariables.value($gameVariables.value(1)[0])→変数番11→0になってるからおかしな事になっているのでは?


何となく分かってきたような気がしてきました。
もう少し考えてみます。
***
:!: 質問前に、過去ログを検索しましょう!
;) 質問が解決できたら、スレッドタイトルに【解決】を追加しましょう!
8-) 自己解決した方は、解決した方法を書きましょう!<後人の為です!

▼プラグイン投稿・検索
https://plugin.fungamemake.com

▼返信がもらいやすい質問の仕方
https://fungamemake.com/archives/8079

▼エラーの詳細なメッセージを見る方法
https://fungamemake.com/archives/12097
astral
記事: 106
登録日時: 2018年11月14日(水) 00:21
連絡を取る:

Re: 変数で配列を利用して、スクリプトを動かしたい

投稿記事by astral » 2019年5月28日(火) 22:02

>入れ子が多いということのようですが、動いている記述だと、変数1[0]というように見えるのですが、そういうものだと理解するのがしぜんということでしょうか。

入れ子が多いというより、$gameVariables.setValueや$gameVariables.valueの仕様の認識の違いのような気がします。

配列を直接指定する場合にも対応して、わかりやすく書くとこういう感じでしょうか。

コード: 全て選択

var array = $gameVariables.value(1);
var id = array[0];
var value = $gameVariables.value(id) + array[1];
$gameVariables.setValue(id, value);

var event = $dataCommonEvents[array[2]];
if (event) {//存在しないコモンイベントIDの場合のエラー対策
    this.setupChild(event.list, 0);
}

配列を直接指定する場合は、先頭を
var array = [11, -10, 2];
に置き換えてください。

“MV:質問” へ戻る