【解決済】1つの変数にPTの並びを代入することは可能ですか?
【解決済】1つの変数にPTの並びを代入することは可能ですか?
質問失礼いたします。
仮に
PTの並びがアクターID1・2・3・4の場合
変数に「1234」を代入。
PTの並びがアクターID4・1・2・3の場合
変数に「4123」を代入。
の様に、1つの変数にPTの並び順にアクターIDを代入させたいのですが
その様な事は可能でしょうか?
御存知の方、居られましたら宜しくお願い致します。
仮に
PTの並びがアクターID1・2・3・4の場合
変数に「1234」を代入。
PTの並びがアクターID4・1・2・3の場合
変数に「4123」を代入。
の様に、1つの変数にPTの並び順にアクターIDを代入させたいのですが
その様な事は可能でしょうか?
御存知の方、居られましたら宜しくお願い致します。
最後に編集したユーザー nozomi [ 2020年8月19日(水) 15:27 ], 累計 1 回
Re: 1つの変数にPTの並びを代入することは可能ですか?
しぐれん様
お返事ありがとうございます。
PTの並びを変数に代入させ
イベントの処理を行った後に
その後に、再度PTの並びを変数に代入させ
イベントの処理前と処理後にPTの並びに変化が有るか否かで
条件分岐させたいです。
ツクールMVのデフォルトの機能でも出来ることは分かるのですが
PTの人数分の条件分岐数
PTの人数分×2個分の変数が必要だと思い
1つの変数にPTの並び順でアクターIDを代入することで
条件分岐数と、特に必要な変数を減らせられたら有り難いなと思い
質問させていただきました。
お返事ありがとうございます。
PTの並びを変数に代入させ
イベントの処理を行った後に
その後に、再度PTの並びを変数に代入させ
イベントの処理前と処理後にPTの並びに変化が有るか否かで
条件分岐させたいです。
ツクールMVのデフォルトの機能でも出来ることは分かるのですが
PTの人数分の条件分岐数
PTの人数分×2個分の変数が必要だと思い
1つの変数にPTの並び順でアクターIDを代入することで
条件分岐数と、特に必要な変数を減らせられたら有り難いなと思い
質問させていただきました。
Re: 1つの変数にPTの並びを代入することは可能ですか?
PTの並び順を文字列扱いで保存すればできますね。
最初の操作で文字列としての記録を開始し、その後でパーティメンバーを記録していきます。
あとは、別の変数に中身をコピーして、比較しましょう。
ただし、この方法は仲間キャラが10種類以上になると使えなくなります。
そうなると、プラグインで解決した方が速くなります。
コード: 全て選択
◆変数の操作:#0007 パーティ並び順記録 = ""
◆変数の操作:#0007 パーティ並び順記録 += パーティメンバー1番のアクターID
◆変数の操作:#0007 パーティ並び順記録 += パーティメンバー2番のアクターID
◆変数の操作:#0007 パーティ並び順記録 += パーティメンバー3番のアクターID
あとは、別の変数に中身をコピーして、比較しましょう。
ただし、この方法は仲間キャラが10種類以上になると使えなくなります。
そうなると、プラグインで解決した方が速くなります。
現在、プラグイン依頼はお休み中です。
Re: 1つの変数にPTの並びを代入することは可能ですか?
しぐれん様
ありがとうございます!
こんな方法があったのですね!
文字列として加算していく方法は
PTの並びを記録するだけではなく
他の用途でも使えそうで大変助かります!
早速、PTをハロルド/ID1、テレーゼ/ID2、マーシャ/ID3の順で並べ
教えていただいた方法を参考に、画像の様にイベントを組み試してみたのですが
メッセージウインドウには「123」と表示はされず
IDを加算していった「6」と表示されてしまったのですが
何処に問題が有るか教えていただいて宜しいでしょうか
質問ばかりで申し訳ございません
ありがとうございます!
こんな方法があったのですね!
文字列として加算していく方法は
PTの並びを記録するだけではなく
他の用途でも使えそうで大変助かります!

早速、PTをハロルド/ID1、テレーゼ/ID2、マーシャ/ID3の順で並べ
教えていただいた方法を参考に、画像の様にイベントを組み試してみたのですが
メッセージウインドウには「123」と表示はされず
IDを加算していった「6」と表示されてしまったのですが
何処に問題が有るか教えていただいて宜しいでしょうか
質問ばかりで申し訳ございません

- 添付ファイル
-
- 無題.png (62.49 KiB) 閲覧された回数 4429 回
- Plasma Dark
- 記事: 731
- 登録日時: 2020年2月08日(土) 02:29
- 連絡する:
Re: 1つの変数にPTの並びを代入することは可能ですか?
実はこれはできません。空文字列をセットしてしまうと、変数取得時に0が返ってきてしまうため、数値加算になります。PTの並び順を文字列扱いで保存すればできますね。
アクターIDの最大値が255以下かつパーティが4人以下(アクターIDを一意に表現するために必要なビット数Nxパーティ人数が32以下)であれば、Nビットずつシフトして加算してしまうのは一つの手だと思います。
ビット演算はちゃんと理解して慣れておかないとメンテナンスできなくなるので、あまり多用はしないほうが良いのですが、利用する変数の数を抑える最適化をするのであれば有用な手段の一つです。
Re: 1つの変数にPTの並びを代入することは可能ですか?
nozomi さん、こんにちは!
隊列によってイベントが分岐できたら、色々楽しい展開ができそうでワクワクしますね!
しぐれんさんに書いていただいている文字列として扱う場合、
Plasma Darkさんに書いていただいているとおりそのままだと数値加算になってしまうようですね。
そのため
◆変数の操作:#0001 パーティ並び順記録 = "_"
のように、最初に文字を入れておくと文字列として扱えるようでした。
ただし、しぐれんさんに記載いただいている通り
> この方法は仲間キャラが10種類以上になると使えなくなります。
1番目/ID:1 2番目/ID:11 の場合と (→ \V[1] は _111 )
1番目/ID:11 2番目/ID:1 (→ \V[2] は _111 )
を比較した場合同じになってしまうようでした。 Plasma Dark さんのビット演算の方法が柔軟に色々対応できそうな気がします。
*===**===*
もし単純に最初の状態と次の状態を比較したいだけであれば、
隊列状態を確認できる $gameParty._actors を変数に入れて比較すればできそうでした。
これでやりたいこと実現できそうでしょうか??
隊列によってイベントが分岐できたら、色々楽しい展開ができそうでワクワクしますね!
しぐれんさんに書いていただいている文字列として扱う場合、
Plasma Darkさんに書いていただいているとおりそのままだと数値加算になってしまうようですね。
そのため
◆変数の操作:#0001 パーティ並び順記録 = "_"
のように、最初に文字を入れておくと文字列として扱えるようでした。
ただし、しぐれんさんに記載いただいている通り
> この方法は仲間キャラが10種類以上になると使えなくなります。
1番目/ID:1 2番目/ID:11 の場合と (→ \V[1] は _111 )
1番目/ID:11 2番目/ID:1 (→ \V[2] は _111 )
を比較した場合同じになってしまうようでした。 Plasma Dark さんのビット演算の方法が柔軟に色々対応できそうな気がします。
*===**===*
もし単純に最初の状態と次の状態を比較したいだけであれば、
隊列状態を確認できる $gameParty._actors を変数に入れて比較すればできそうでした。
これでやりたいこと実現できそうでしょうか??
- Plasma Dark
- 記事: 731
- 登録日時: 2020年2月08日(土) 02:29
- 連絡する:
Re: 1つの変数にPTの並びを代入することは可能ですか?
できるできないで言えば、できます。これでやりたいこと実現できそうでしょうか??
スクリプトを書くということは、それが何を意味するものであるか理解して、何か問題が発生しても対処できる(あるいは、状況を正しく把握できる)ようにするということなので、とりあえず動くからこれで、というのはあまり推奨しません。
Game_Party クラスの持つ _actors メンバは、パーティメンバーのアクターIDを配列で保持しています。
ただ、RPGツクールMVのコード規約において、 _ で始まる変数はクラス内からのみアクセスされるという暗黙的な意味があります。
クラス外からそのメンバに直接アクセスするのはあまり行儀の良いやり方ではありません。
行儀の良いやり方ではありませんが、それを承知の上でやるのであれば、それもまた一つの選択ではあります。
実際、行儀良くやろうとすると少し回りくどいコードになります。
コード: 全て選択
$gameParty.members().map(member => member.actorId())
.map 以降で、その情報の中からアクターIDだけ取り出した配列にしています。
得られる結果は $gameParty._actors と同じです。
Re: 1つの変数にPTの並びを代入することは可能ですか?
たくろう様、Plasma Dark様
お返事ありがとうございます!
変数のスクリプトから$gameParty._actorsを代入することにより
PTの並びを変数に代入する事はできたのですが
何故かPTの並びを変更すると、並び変更前に代入していた値まで
随時、変更されてしまい
Plasma Dark様が記述されている
$gameParty.members().map(member => member.actorId())を使用することで
イベントコマンドを使用した間のみのPTの並び順を代入する事ができました
後はイベント前のPTの並び、イベント後のPTの並びを別々の変数に代入させ
条件分岐させるだけ・・・
と、試しに画像のようなイベントを組んでみたのですが
イベント前、イベント後の変数の値(並び順)が同じでも
値(並び順)が違うと判定されてしまいます・・・
$gameParty.members().map(member => member.actorId())を代入させた
変数の値を正しく比較させようとしたらどのようにしたら良いでしょうか?
重ね重ね、質問ばかり本当に申し訳ございません
お返事ありがとうございます!
変数のスクリプトから$gameParty._actorsを代入することにより
PTの並びを変数に代入する事はできたのですが
何故かPTの並びを変更すると、並び変更前に代入していた値まで
随時、変更されてしまい
Plasma Dark様が記述されている
$gameParty.members().map(member => member.actorId())を使用することで
イベントコマンドを使用した間のみのPTの並び順を代入する事ができました

後はイベント前のPTの並び、イベント後のPTの並びを別々の変数に代入させ
条件分岐させるだけ・・・
と、試しに画像のようなイベントを組んでみたのですが
イベント前、イベント後の変数の値(並び順)が同じでも
値(並び順)が違うと判定されてしまいます・・・
$gameParty.members().map(member => member.actorId())を代入させた
変数の値を正しく比較させようとしたらどのようにしたら良いでしょうか?
重ね重ね、質問ばかり本当に申し訳ございません

- Plasma Dark
- 記事: 731
- 登録日時: 2020年2月08日(土) 02:29
- 連絡する:
Re: 1つの変数にPTの並びを代入することは可能ですか?
配列同士の比較なので、まあそうなりますね。イベント前、イベント後の変数の値(並び順)が同じでも
値(並び順)が違うと判定されてしまいます・・・
(js において [1, 2, 3] === [1, 2, 3] は偽です)
多少雑でも順序さえ比較できればよいのであれば、joinなりで文字列として連結してしまってから比較する手はあります。
コード: 全て選択
$gameParty.members().map(member => member.actorId()).join("_")