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

アバター
にいやん
記事: 218
登録日時: 2016年7月02日(土) 00:38
お住まい: 地獄4丁目西のゴミ置き場
連絡を取る:

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

投稿記事by にいやん » 2020年8月22日(土) 05:44

配列から値を取り出す場合、

コード: 全て選択

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'

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

どのような記述にすると正しく取り出せるのでしょうか?
最後に編集したユーザー にいやん on 2020年8月22日(土) 07:14 [ 編集 1 回目 ]

アバター
Trb
記事: 151
登録日時: 2015年11月15日(日) 19:26
連絡を取る:

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

投稿記事by Trb » 2020年8月22日(土) 06:27

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

コード: 全て選択

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

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

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

コード: 全て選択

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

こんな書き方でも同じ結果になったりします。(余談ですが)
アバター
にいやん
記事: 218
登録日時: 2016年7月02日(土) 00:38
お住まい: 地獄4丁目西のゴミ置き場
連絡を取る:

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

投稿記事by にいやん » 2020年8月22日(土) 06:34

なるほど!とてもわかり易い説明をありがとうございます!
この御恩は一生忘れません!

“MV:質問” へ戻る