配列変数の質問

アバター
MEIKOI
記事: 168
登録日時: 2018年9月22日(土) 20:13
連絡を取る:

配列変数の質問

投稿記事by MEIKOI » 2020年9月14日(月) 16:36

こんにちは。いつもお世話になってます。

ツクールMVのゲーム変数について質問させてください。

数個のゲーム変数を配列変数として使っているのですが

配列変数に配列変数を入れ込んで2次元にして使ってみたいのですが

そのような事は、コマンドスクリプトの記述で可能でしょうか? 

イメージとしては、$gameVariables._data[][]が

$gameVariables._data[][][]になるようなイメージなのですが・・・。

これは、流石にできませんか?

説明が下手ですみません。

論理イヌ
記事: 186
登録日時: 2020年3月13日(金) 13:05

Re: 配列変数の質問

投稿記事by 論理イヌ » 2020年9月15日(火) 16:23

>これは、流石にできませんか?

一度試してみることをおすすめします。
その上でできない場合は、
「こういうスクリプトを書いたができなかった」と
質問していただければ、
他の方も具体的なアドバイスがしやすいと思います。
アバター
MEIKOI
記事: 168
登録日時: 2018年9月22日(土) 20:13
連絡を取る:

Re: 配列変数の質問

投稿記事by MEIKOI » 2020年9月15日(火) 19:58

理論イヌ様

こんにちは!アドバイスありがとうございます。
試しては、みたんですができないようでした。
とりあえず、ゲーム変数は1次元配列で使う事だけに、とどめて置こうかと思います。
2次元配列は、一般的な方法で変数を作って使いたいと思います。
またアドバイスよろしくお願いします。
論理イヌ
記事: 186
登録日時: 2020年3月13日(金) 13:05

Re: 配列変数の質問

投稿記事by 論理イヌ » 2020年9月15日(火) 20:32

コード: 全て選択

let test = [
  ['あ', 'い', 'う'],
  ['か', 'き', 'く'],
  ['さ', 'し',
    ['す','せ','そ']
  ]
];
$gameVariables.setValue(1,test[2][2][0]);


これで変数1に「す」が格納できました。
やりたいことは、こういうことで合ってますか?
アバター
MEIKOI
記事: 168
登録日時: 2018年9月22日(土) 20:13
連絡を取る:

Re: 配列変数の質問

投稿記事by MEIKOI » 2020年9月16日(水) 22:16

理論イヌ様

こんにちは。アドバイスありがとうございます。
やりたい事は、たくさんあるので上手く説明できなかったのですが
ゲーム変数を2次元で宣言できるのかというか
Array[x][y]のような記述で簡単に操作できないかなと思ったんです。
色々調べてみたり試してみたりしたんですが、無いですね。
普通にfor文で好きな変数作って使うしかないのかなと思ったんですが
それを試してみるとセーブデータに含まれないようなんで、今調べているところです。
説明が下手ですみません。また改めて質問させていただきます。
ありがとうございます。
アバター
WTR
記事: 558
登録日時: 2015年12月22日(火) 19:14

Re: 配列変数の質問

投稿記事by WTR » 2020年9月16日(水) 22:51

私が質問を取り違えて理解していなければ、フツーに問題なく出来るはず。
$gameVariables._data って配列型ですし
ゲーム変数に配列を代入した時点で2次元配列になってるということになる気がします。

それは置いといて
変数1つまり $gameVariables._data[1] を2次元配列にして
それぞれの要素にアクセスするには例えば…

コード: 全て選択

$gameVariables._data[1] = [[1, 2, 3], [10, 20, 30], [100, 200, 300]] //(3) [Array(3), Array(3), Array(3)]

$gameVariables._data[1][0][0] //1

$gameVariables._data[1][1][0] //10

$gameVariables._data[1][2][2] //300


こういうことではないですか?
Twitter、はじめました。
https://twitter.com/wtr_in_reverie/
アバター
MEIKOI
記事: 168
登録日時: 2018年9月22日(土) 20:13
連絡を取る:

Re: 配列変数の質問

投稿記事by MEIKOI » 2020年9月16日(水) 23:44

WTR様 こんにちは。アドバイスありがとうございます。

スクリプト打ち込んでみました。配列には、2次元で格納されてました。

$gameVariables._data[1] = [[1, 2, 3], [10, 20, 30], [100, 200, 300]] 

でフツーに問題なくいけるはずとの事で、あれっと思って。

下の記述で行けました。ありがとうございます。

$gameVariables._data[1] = new Array(100);
for(var x = 0; x < $gameVariables._data[1].length; x++){
$gameVariables._data[1][x] = new Array(100);
for(var y = 0; y < $gameVariables._data[1].length; y++){
$gameVariables._data[1][x][y] = 999;
}
}

これで、セーブデータに含めて保存できるかな?

また気が付いた事がありましたら教えてくださいm(_ _)m
アバター
WTR
記事: 558
登録日時: 2015年12月22日(火) 19:14

Re: 配列変数の質問

投稿記事by WTR » 2020年9月17日(木) 00:18

セーブデータの件はよくわかんないですね…
巨大なデータをセーブしようとするとconsoleに警告が出た気がしますが
警告が出るだけでセーブできないことはなかったような

100x100ってバカにならないサイズなので注意したほうがいいかもしれないです。
DL版なら気にならないですけどアツマールとかセーブデータの制限がわりとキツくて
よくあるゲームの10倍20倍の容量を食う、なんてことになると結構痛いと思うので…
Twitter、はじめました。
https://twitter.com/wtr_in_reverie/
論理イヌ
記事: 186
登録日時: 2020年3月13日(金) 13:05

Re: 配列変数の質問

投稿記事by 論理イヌ » 2020年9月17日(木) 08:49

WTRさんで解決していますが、
私の回答が的外れすぎて恥ずかしかったので、
性懲りもなくでてきました……。

>ゲーム変数を2次元で宣言できるのかというか
>Array[x][y]のような記述で簡単に操作できないかな

特別な宣言をしなくても、通常の変数に多次元配列は格納できます。

そういう質問ではなかったらすみません。
セーブデータとか、for文とか、私も何をされたいのか理解できていないため、
この回答も的外れてしたら重ねて申し訳ないです……。


で、下記2つは同じ動きをします。
変数1に多次元配列、変数2に「す」が格納されています。

コード: 全て選択

◆変数の操作:#0001 配列のやつ = [['あ'],['か'],['さ', 'し', ['す','せ','そ']]];
◆変数の操作:#0002 配列のやつ2 = $gameVariables.value(1)[2][2][0];
◆文章:なし, ウィンドウ, 下
:  :\v[2]


コード: 全て選択

const test = [
  ['あ', 'い', 'う'],
  ['か', 'き', 'く'],
  ['さ', 'し',
    ['す','せ','そ']
  ]
];
//配列を変数1に格納
$gameVariables.setValue(1,test);
//変数1の値を取得
const test2 = $gameVariables.value(1);
//配列から任意の要素を取り出して、変数2に格納
$gameVariables.setValue(2,test2[2][2][0]);
アバター
MEIKOI
記事: 168
登録日時: 2018年9月22日(土) 20:13
連絡を取る:

Re: 配列変数の質問

投稿記事by MEIKOI » 2020年9月17日(木) 10:00

WTR様 こんにちは。アドバイスありがとうございます。
アツマールにはじめてテストゲームをアップした時に、ブロック数に驚愕した事があります。
セーブデータの容量は、確認必須ですね。注意してどれくらい増えていくのか見ながら進めたいと思います。

論理イヌ様 こんにちは。アドバイスありがとうございます。
>特別な宣言をしなくても、通常の変数に多次元配列は格納できます。
そうなんですね、私がいろいろと考えすぎていたようです。
プログラミング的な思考には、だいぶ慣れてきたのですが
なにせ'素人'なもので、基本の木が未熟なもので、あっち行ったりこっち行ったりしながら
ここで教えていただいて、なんとか作りたいものを作れないかと試行錯誤してます。
私の質問の仕方が悪かったのですみません。重ねてお詫びいたします。
時間を割いて教えていただきまして感謝申し上げます。ありがとうございます。

“MV:質問” へ戻る