【解決】複数の変数の値を比較・順位を算出するのを配列でやりたい
Posted: 2022年6月02日(木) 12:03
はじめまして
少し前の記事で「複数の変数の値を比較・順位を算出するプラグイン」というのがありまして、その動作はできたんですが、これを配列でやりたい。けど私の能力的には無理。なのでもし、わかる方がいれば教えていただければ幸いです。
実現したいことは、各アクター中でもっとも攻撃力が高い人だけにメッセージ出したりイベントが発動できるようにしたいのですが、、、
▼参照した記事
viewtopic.php?t=1737
試したこと、、、というか試せてもいませんが、やったこととしては下記となります。
■アクターの能力値攻撃力以下6項目を配列として入れる。アクター4人分を変数21~24に入れる。
▼変数21
[$gameActors.actor(1).atk,$gameActors.actor(1).def,$gameActors.actor(1).mat,$gameActors.actor(1).mdf,$gameActors.actor(1).agi,$gameActors.actor(1).luk]
▼変数22
[$gameActors.actor(2).atk,$gameActors.actor(2).def,$gameActors.actor(2).mat,$gameActors.actor(2).mdf,$gameActors.actor(2).agi,$gameActors.actor(2).luk]
▼変数23
[$gameActors.actor(3).atk,$gameActors.actor(3).def,$gameActors.actor(3).mat,$gameActors.actor(3).mdf,$gameActors.actor(3).agi,$gameActors.actor(3).luk]
▼変数24
[$gameActors.actor(4).atk,$gameActors.actor(4).def,$gameActors.actor(4).mat,$gameActors.actor(4).mdf,$gameActors.actor(4).agi,$gameActors.actor(4).luk]
■これを前述のyamachanさんのソートスクリプトに入れて、例えば攻撃力が高いのはアクター2の人だ!とかしたいんですが、、、やり方がさっぱりわかりません。
▼何も考えずにそのまま記述すると
$gameVariables._data.map(function(v,i){return [v,i]}).slice(21,24).filter(function(v){return v[0]!==undefined}).sort(function(a,b){return b[0]==a[0] ? a[1]-b[1] : b[0]-a[0]})
当然、21~24に入れたアクターのすべての能力値が入ってしまいます(4人分×6能力値=24の数値)
これをたとえば、攻撃の能力値の順位だけをだしたり、魔法力の順位だけをだしたりしたいのです。
まあ、配列を使わずに全数値24個分変数を設定すればできるんですが、、、スマートじゃないなあ~と、、、
少し前の記事で「複数の変数の値を比較・順位を算出するプラグイン」というのがありまして、その動作はできたんですが、これを配列でやりたい。けど私の能力的には無理。なのでもし、わかる方がいれば教えていただければ幸いです。
実現したいことは、各アクター中でもっとも攻撃力が高い人だけにメッセージ出したりイベントが発動できるようにしたいのですが、、、
▼参照した記事
viewtopic.php?t=1737
試したこと、、、というか試せてもいませんが、やったこととしては下記となります。
■アクターの能力値攻撃力以下6項目を配列として入れる。アクター4人分を変数21~24に入れる。
▼変数21
[$gameActors.actor(1).atk,$gameActors.actor(1).def,$gameActors.actor(1).mat,$gameActors.actor(1).mdf,$gameActors.actor(1).agi,$gameActors.actor(1).luk]
▼変数22
[$gameActors.actor(2).atk,$gameActors.actor(2).def,$gameActors.actor(2).mat,$gameActors.actor(2).mdf,$gameActors.actor(2).agi,$gameActors.actor(2).luk]
▼変数23
[$gameActors.actor(3).atk,$gameActors.actor(3).def,$gameActors.actor(3).mat,$gameActors.actor(3).mdf,$gameActors.actor(3).agi,$gameActors.actor(3).luk]
▼変数24
[$gameActors.actor(4).atk,$gameActors.actor(4).def,$gameActors.actor(4).mat,$gameActors.actor(4).mdf,$gameActors.actor(4).agi,$gameActors.actor(4).luk]
■これを前述のyamachanさんのソートスクリプトに入れて、例えば攻撃力が高いのはアクター2の人だ!とかしたいんですが、、、やり方がさっぱりわかりません。
▼何も考えずにそのまま記述すると
$gameVariables._data.map(function(v,i){return [v,i]}).slice(21,24).filter(function(v){return v[0]!==undefined}).sort(function(a,b){return b[0]==a[0] ? a[1]-b[1] : b[0]-a[0]})
当然、21~24に入れたアクターのすべての能力値が入ってしまいます(4人分×6能力値=24の数値)
これをたとえば、攻撃の能力値の順位だけをだしたり、魔法力の順位だけをだしたりしたいのです。
まあ、配列を使わずに全数値24個分変数を設定すればできるんですが、、、スマートじゃないなあ~と、、、