ページ 1 / 2
生きているアクターと死んでいるアクターの現在座標を取得したい
Posted: 2022年10月02日(日) 17:11
by 論よりショーゴ
奏ねこま様が作られた、戦闘不能アクターを棺桶にして隊列の後方に持っていくプラグイン「InCoffin.js」を導入している前提の話になります。
【InCoffin.js】
https://makonet.sakura.ne.jp/rpg_tkool/ ... nCoffin.js$gameParty.Members()ですと、戦闘不能アクターがいても、元の隊列順の配列を返しますが
これを、後方に移動した戦闘不能アクターがいる状態の順番で取得し、パーティー全員(4人)のマップ座標のxとyを取る方法を知りたいです。
本来なら、フォロワーのx座標は、$gamePlayer.followers().follower(n).xで取得できますが
$gamePlayer.followers()の配列も$gameParty.Members()と同じ順番で取得されるため
結局は希望する隊列順の配列が得られません。
そこで、生存アクターの配列に、死亡アクターの配列を追加するようにしました。
コード: 全て選択
$gameParty.aliveMembers().concat($gameParty.deadMembers());
これで希望する隊列順の配列を取得できたのですが
$gameParty.aliveMembers()と$gameParty.deadMembers()には、マップのxとy座標の情報がありません。
この二つの配列に、マップ座標を追加する方法はありますでしょうか?
Re: 生きているアクターと死んでいるアクターの現在座標を取得したい
Posted: 2022年10月03日(月) 23:45
by 論よりショーゴ
ヒントだけでも構いませんので
ご助言いただけますとありがたいです。
足りない情報があればお申し付けください。
どうかよろしくお願いいたします。
Re: 生きているアクターと死んでいるアクターの現在座標を取得したい
Posted: 2022年10月04日(火) 02:11
by 剣崎 宗二
論よりショーゴ さんが書きました:$gameParty.aliveMembers()と$gameParty.deadMembers()には、マップのxとy座標の情報がありません。
この二つの配列に、マップ座標を追加する方法はありますでしょうか?
無いと考えます。
Game_Partyの内容は主に戦闘中に使用される事を前提としており、マップ上で表示されるGame_FollowerをGame_Partyの内容であるGame_ActorやGame_Battlerから参照する方法はないと思いますね。
(そもそもGame_Followerは表示されない場合もありますし、NPCをFollowerとして連れ歩くプラグインもありますので、1:1対応したらそう言ったことはできなくなります)
-----
そもそもの話ですが、何故パーティの誰(を代表するGame_Follower)がどこの座標にあるのか確認したいのでしょうか?
というのも、InCoffin.jsの仕様がこれを妨げる事になると考えます。
$gamePlayer.followers().follower(n).actor()で取得したアクターが「データ」であると考え、ABCDの4名のパーティの内BCが死亡している、という状態になった場合、InCoffinを入れているとこうなります。
Aのデータ(画像はA)
Bのデータ(画像はD)
Cのデータ(画像は棺桶)
Dのデータ(画像は棺桶)
InCoffinは実際に順番を入れ替えてはおらず、画像変更により「変わっているように見せかけている」だけなのです…
Re: 生きているアクターと死んでいるアクターの現在座標を取得したい
Posted: 2022年10月04日(火) 14:41
by 論よりショーゴ
剣崎 宗二 様
ご回答いただき、ありがとうございます。
無いのですね・・・・。
大変残念です。
コアスクリプトのpartyオブジェクトに
マップ座標を入れればいけるのかなと考えていましたが
そういう簡単な話ではないのですね。
>そもそもの話ですが、何故パーティの誰(を代表するGame_Follower)が
>どこの座標にあるのか確認したいのでしょうか?
ロジックパズルアドベンチャーを作っていまして
床落ちアイテム(イベント)の上に乗って、フォロワーが拾ったり置いたりするシステムのため
どうしても先頭アクター以外のフォロワーの現在座標が必要になります。
死亡したフォロワーは、ものを拾ったりできなくなる仕様にしていて
現在だと棺桶の足元にあるアイテムを拾えたり、生きているメンバーが拾えなくなったりします。
さすがに死んだメンバーを先頭にして歩かせるわけにはいかないので
InCoffin.jsを導入したのですが、このようなことになっています。
何かいいお知恵がありましたら
些細な糸口でも構いませんので、頂戴できますと幸いです。
Re: 生きているアクターと死んでいるアクターの現在座標を取得したい
Posted: 2022年10月04日(火) 20:14
by 剣崎 宗二
内容を聞く限り生きているフォロワーが「誰であるか」は然程重要ではないように思えます。
であれば、InCoffinでは棺桶が常に最後尾である事を利用し、$gameParty.aliveBattleMembers().lengthで生きているメンバーの数を取得し、$gamePlayer.followers().follower(n).xのnをその生きてるメンバーの数までしか数えない、とすればいいのではないでしょうか?
例えば $gameParty.aliveBattleMembers().length が3であれば、Game_Player と$gamePlayer.followers().follower(0)、$gamePlayer.followers().follower(1)が生きている者となり、この3名のxy座標を取得しイベントを実行すればよいのでは?
Re: 生きているアクターと死んでいるアクターの現在座標を取得したい
Posted: 2022年10月04日(火) 22:41
by 論よりショーゴ
剣崎 宗二 様
折り返しのご連絡、ありがとうございます。
>内容を聞く限り生きているフォロワーが「誰であるか」は然程重要ではないように思えます。
お伝えしていない仕様がありまして
フォロワーによって持てるアイテムが限定されているので、「誰であるか」が必要になってきます。
「このキャラは重いアイテムを持てるけど、先端恐怖症なので尖ったアイテムは持てない」や
「このキャラは重いものは一切持てないけど、幽霊だから物理系以外のアイテムは持てる」等です。
総勢12人のキャラが居て、それぞれに持てるアイテムが異なります、
新しい仲間が増えたら新しいステージに進める。ゲーム性としては、ゼルダに近いかもしれません、
ですので、「今このキャラがどの座標にいるか」を明確に取得しなければなりません。
蘇生したらその隊列順は元の状態に復帰させなければなりませんから
やはりInCoffinの仕様が必要なわけで、結局$gameParty内にマップ座標の情報が欲しい、という結論に行きつきます。
Re: 生きているアクターと死んでいるアクターの現在座標を取得したい
Posted: 2022年10月05日(水) 00:11
by 剣崎 宗二
論よりショーゴ さんが書きました:ですので、「今このキャラがどの座標にいるか」を明確に取得しなければなりません。
蘇生したらその隊列順は元の状態に復帰させなければなりませんから
やはりInCoffinの仕様が必要なわけで、結局$gameParty内にマップ座標の情報が欲しい、という結論に行きつきます。
であれば、
正しい仕様でどこかに依頼するなり、ご自分で作るなりで、正しい形の「InCoffin.js」を組むしかありません。前述の通り、
$gamePlayer.followers().follower(n).actor()で取得したアクターが「データ」であると考え、ABCDの4名のパーティの内BCが死亡している、という状態になった場合、InCoffinを入れているとこうなります。
Aのデータ(画像はA)
Bのデータ(画像はD)
Cのデータ(画像は棺桶)
Dのデータ(画像は棺桶)
と言ったように、InCoffinを入れた状態ではデータと表示画像はマッチしないので、これをマッチするように正しく作らないといけないです。
そうしない限り、何かしらの方法でGame_Partyから逆検索を行ったとして、そもそもBのデータとつながっているフォロワーは表示上Dになっているので、いずれにしろしっちゃかめっちゃかになります。
----
とはいう物の、邪道の方法も無くはないです。
コード: 全て選択
$gameParty.aliveMembers().concat($gameParty.deadMembers());
これで得られた配列(zとします)を、ごり押しで1:1でGame_Followersに対応すると考え、
z[0].x を$gamePlayer.x
z[1].x を$gamePlayer.followers().follower(0).x
とする…と言ったように、順に取る形です。
合っている可能性は高いですが、保証はできません。
Re: 生きているアクターと死んでいるアクターの現在座標を取得したい
Posted: 2022年10月05日(水) 15:33
by 論よりショーゴ
剣崎宗二様
繰り返しありがとうございます。
>z[0].x を$gamePlayer.x
>z[1].x を$gamePlayer.followers().follower(0).x
>とする…と言ったように、順に取る形です。
>合っている可能性は高いですが、保証はできません。
すいません、僕の読解力がなさ過ぎてよく理解できていないので
もう一度、情報を整理させていただきます。
$gameParty.aliveMembers().concat($gameParty.deadMembers());
をzと仮定して、
z[0].xのxがまず存在しないので取得できないのと、
z[0]と、$gamePlayer
z[1]と、$gamePlayer.followers().follower(0)
z[2]と、$gamePlayer.followers().follower(1)
z[3]と、$gamePlayer.followers().follower(2)
上記のように、右側の情報が綺麗に連番になっていれば話は別ですが、、
インデックスが、InCoffinの影響でしっちゃかめっちゃかなので
どうやっても紐づけられないのではないでしょうか。
>ごり押しで1:1でGame_Followersに対応すると考え、
ごり押しで1:1にする案が浮かばないという絶望的な状態です。
最初、僕も$gamePlayer.followers().follower(n)とz[n]を紐づけようと、
forを回して配列内の要素からデータを参照するなどやりましたが、結局グチャグチャになってしまって叶いませんでした。
Re: 生きているアクターと死んでいるアクターの現在座標を取得したい
Posted: 2022年10月05日(水) 18:49
by 剣崎 宗二
私の説明力の限界である可能性もあるので、最後にもう一度説明を試みます
(これでダメだったら他の方に方法を考えてもらった方が良いかもしれません)
z[0]と、$gamePlayer
z[1]と、$gamePlayer.followers().follower(0)
z[2]と、$gamePlayer.followers().follower(1)
z[3]と、$gamePlayer.followers().follower(2)
上記のように、右側の情報が綺麗に連番になっていれば話は別ですが、、
内容を一旦無視して、そう「なっている」と仮定してしまう方法です。
InCoffinの並び替え的に、少なくとも画像上はそうなっている「はず」です。
なので、z[0].x(存在しない)を取得したい時は、代わりに存在している$gamePlayer.xを取得しに行く、という形ですね。
これが「ごり押しで1:1」と言った理由です。
逆にダメだった場合は、「どういう取得をして」「何のデータが合致しなかったのか」具体例を挙げていただかないと、私も推測すらできないですね…
Re: 生きているアクターと死んでいるアクターの現在座標を取得したい
Posted: 2022年10月06日(木) 23:29
by 論よりショーゴ
剣崎 宗二様
すいません。
丸一日考えましたが、言っている意味が理解できませんでした。
>内容を一旦無視して、そう「なっている」と仮定してしまう方法です。
というのがまず分からないのと
>代わりに存在している$gamePlayer.xを取得しに行く
紐づけできないのにどうやって取得しに行くのでしょうか?
すいません。
僕の頭が悪すぎるようです。