ページ 11

【解決済み】マップのメモから取得した配列からランダムに値を取得したい

Posted: 2020年8月22日(土) 05:44
by にいやん
配列から値を取り出す場合、

コード: 全て選択

var Enemy = ['11','12','16'];
$gameVariables.setValue(335, Enemy[Math.floor(Math.random() * Enemy.length)]);

とすると問題なく取り出せるのですが、マップのメモに配列を記述して取り出そうとするとうまく取り出せません。

マップのメモには下記を記述しています。

コード: 全て選択

<Enemy:'11','12','16'>


マップのメモを読み込んで変数に格納させます。

コード: 全て選択

var Enemy = [$dataMap.meta['Enemy']];
$gameVariables.setValue(335, Enemy[Math.floor(Math.random() * Enemy.length)]);

この場合、

コード: 全て選択

'11','12','16'

という結果が返ってきてしまいます。

どのような記述にすると正しく取り出せるのでしょうか?

Re: マップのメモから取得した配列からランダムに値を取得したい

Posted: 2020年8月22日(土) 06:27
by Trb
メモ欄の値はうまく変換してやらないと1つの文字列として取得されるので、『11と12と16の配列』じゃなくて『'11','12','16'』という1固まりの文字列になってしまってるわけです。
これを配列に変換するにはsplit()という関数を使います。
1行目を

コード: 全て選択

var Enemy = $dataMap.meta['Enemy'].split(',');

という記述に変えてください。

splitというのは、文字列の中から特定の文字を探しその文字で区切って配列に変換する関数です。
なので区切りの記号は , じゃなくても何でもよくて、たとえば

コード: 全て選択

['11'と'12'と'16'].split('と')

こんな書き方でも同じ結果になったりします。(余談ですが)

Re: マップのメモから取得した配列からランダムに値を取得したい

Posted: 2020年8月22日(土) 06:34
by にいやん
なるほど!とてもわかり易い説明をありがとうございます!
この御恩は一生忘れません!