1. このサイトではcookie (クッキー) を使用しています。サイトの利用を継続した場合、cookieの使用に同意したものとみなさせていただきます。 詳しくはこちらをご覧ください。

(解決済み)パーティの隊列・並びを取得し変数に入れたい

onaka01282019-01-03に開始した「ツクールMV」の中の討論

  1. onaka0128

    onaka0128 ユーザー

    いつもお世話になっております。

    パーティ内の何番目にどのキャラがいるかを取得し、変数に入れたいのですが、それが可能な方法やスクリプトなどはあるでしょうか?
     
    #1
    こまどり乳酸菌神無月サスケ がいいね!しています
  2. まっつUP

    まっつUP ユーザー

    onaka0128様
    お世話になります。

    イベントコマンド「変数の操作」で近い動作が見込めると思いますがいかがでしょうか。
    パーティメンバー総数が9以上になる場合があるとだめですが・・・
    例:
    ◆変数の操作:#0001 = パーティメンバー3番のアクターID
     
    #2
    こまどり乳酸菌, onaka0128神無月サスケ がいいね!しています
  3. 神無月サスケ

    神無月サスケ ユーザー

    これはスクリプトを使うまでもなく、イベントコマンドの「変数の操作」で可能です。
    「オペランド」は、「ゲームデータ」を選択し、「パーティ」を選択すれば、
    その後、メンバー#1~#8のアクターIDが取得可能です。
    capture130.png
    もっと凝ったことをしたい場合、またご相談ください。
     
    #3
    こまどり乳酸菌, onaka0128まっつUP がいいね!しています
  4. onaka0128

    onaka0128 ユーザー

    まっつUP様・神無月サスケ様返信ありがとうございます!


    お二人に教えて頂いた方法でメンバーIDが取得できました!が……どうやら私がやっていることは、難しいことみたいで……。

    やりたかったことは、パーティメンバーを入れ替えした場合に何番目にいて、その場所を取得して変数に入れ、場所ごとに違うイベントを起こすという事をしたかったのです。

    例えば、1番目にいたハロルドを3番目に並び替えた場合のハロルドが3番目という変数を取得したいんです。分かりづらくて申し訳ないです……。

    多分、お二人に教えて頂いた方法で出来るのでしょうが、どうやっていいか私には思いつかず……。可能でしたらアクターの入れ替え後の何番目を変数に入れる方法を教えて頂けると幸いです。
     
    #4
    こまどり乳酸菌, 神無月サスケまっつUP がいいね!しています
  5. まっつUP

    まっつUP ユーザー

    アクターがパーティメンバーの何番目にいるかどうかは以下のスクリプトで取得できると思います。
    $gameActors.actor(id).index()
    引数には任意のアクターのidを入れてください。
     
    #5
    こまどり乳酸菌, onaka0128神無月サスケ がいいね!しています
  6. 神無月サスケ

    神無月サスケ ユーザー

    どうも、onaka0128さん。
    いえいえ、それも難しくありません。
    イベントコマンド「変数の操作」で、以下の式の「アクターID」の部分を
    実際の数字に直して、打ち込んでみてください。
    コード:
    $gameParty._actors.indexOf(アクターID) + 1
    これだと、先頭を1として、何番目かが分かります。
    仮にパーティー内にいない場合、0になります。
    たとえば、マーシャさんの並び順を取得したい場合のスクショを示します。
    capture131.png
    いかがでしょ。これで恐らく行けると思いますので、試してみてください。
     
    #6
    onaka0128まっつUP がいいね!しています
  7. 神無月サスケ

    神無月サスケ ユーザー

    うわ、まっつUPさんが、またしても1分以内前に僕と同じ回答をしてくれました!
    僕と異なりますが、基本は全く一緒です。
    ただ、僕は「+1」を付けることで、「先頭は1、続いて2、3、4、いなければ0」ですが、
    まっつUPさんの式では、「先頭は0、続いて1、2、3、」いなければマイナス1」になる、
    といった点しか異なりません。
     
    #7
    こまどり乳酸菌, まっつUPonaka0128 がいいね!しています
  8. onaka0128

    onaka0128 ユーザー

    まっつUP様・神無月サスケ様返信ありがとうございます!


    まっつUP様 

    すみません、さっき上手くいかなかったんですが、再度やってみたら上手くいきました!どうやら$gameActors.actor(1).index(1)のindex(1)の部分に数字を入れていなかったのが原因だったようです!
    無事に出来ました!ありがとうございます!


    神無月サスケ様

    ありがとうございます、教えて頂いたスクリプトを入力して確認してみたらちゃんと取得されていました!とても嬉しいです!これで作りたかったイベントが作れます!
    ところで、どこでそのスクリプトで使える式?が見れるのでしょうか……いちいち聞くのも申し訳ないので自分でも理解しておきたくて……。
    ※追記ありがとうございます!なるほど、そういう違いなのですね!詳しく教えて下さりありがとうございます!
     
    最後に編集: 2019-01-03
    #8
    こまどり乳酸菌, 神無月サスケまっつUP がいいね!しています
  9. まっつUP

    まっつUP ユーザー

    私が提示したスクリプトでは普通に~.index()として大丈夫です。後ろのほうは引数は要りません。
    アクターidは指定しないとエラーメッセージがコンソール等に表示されると思います。
    ちなみに、スクリプトはプロジェクトに
    rpg_objects.jsというjsファイルがあるのでこれを開いて確認しました。
     
    #9
    こまどり乳酸菌, onaka0128神無月サスケ がいいね!しています
  10. 神無月サスケ

    神無月サスケ ユーザー

    >onaka0128さん
    まっつUPさんと僕のアドバイスで、うまく行ったようで、大変よかったです。

    さて、「どうしてこの式を知っているのか」というご質問にお答えします。

    これはずばり、コアスクリプト(rpg_object.jsとか、scriptsフォルダにあるjsファイル)を、
    きちんと解析しているからです。
    JavaScriptで書かれていることと、かなり大規模なため、解析は初心者は困難でしょうが、
    有志でインデックスを作られている方などもいるようですね。

    本格的にプラグインを作っている人は、僕やまっつUPさんのように、
    これらのスクリプト(プログラム)をしっかり解析して、そして自分のものにしています。
    ただ、相当複雑なので、本格的に勉強したい場合以外は、
    ある程度はこのフォーラムで相談すれば、誰かが答えてくれるんじゃないでしょうか。
     
    #10
    こまどり乳酸菌, ganges, onaka0128他1人 がいいね!しています
  11. onaka0128

    onaka0128 ユーザー

    まっつUP様・神無月サスケ様返信ありがとうございます!


    まっつUP様

    なるほど……ではindexの方ではなくてアクターidの方を入れ忘れていたから上手くいかなかったのですね、理解しました!
    プラグイン内のjsファイルを見ればスクリプトで使える式が分かるんですね!ありがとうございます!


    神無月サスケ様

    お二人のおかげで作りたかったイベントが無事完成しました!ありがとうございます!
    なるほど、Javascriptを勉強しないと難しいんですね……まだまだフォーラムでお世話になりそうです。皆さま、恐縮です……。
    ちなみにですが、どのようにしてJavascriptを勉強しましたか?やはり本で勉強でしょうか。
     
    最後に編集: 2019-01-03
    #11
    こまどり乳酸菌神無月サスケ がいいね!しています
  12. 神無月サスケ

    神無月サスケ ユーザー

    JavaScriptの勉強方法についてですが、
    これは、山のように本が出ているので、自分に合った本を選んで
    勉強すればいいと思います。

    僕は、C++やJava、Rubyなど、他のオブジェクト指向言語を勉強した後だったので、
    言語仕様は、ほぼ、簡単な説明をしている簡素な本を見つけて、
    あとは、ネット上のJavaScriptリファレンス
    https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference
    を見ながら勉強していきましたが、あまりプログラミング経験が深くない場合、
    このやり方は厳しいかも、と思いますので、
    もう少し、自分のレベルに合ったJavaScriptの本を見つけてみてください。

    そして、ツクールMVのスクリプトって、もともとツクールVX Aceなどで採用されていた
    Rubyというオブジェクト指向言語で書かれたものをベースにしているため、
    かなりオブジェクト指向よりな記述になっています。

    そのため、基礎を勉強した後は、コアスクリプトを読む前に、
    「オブジェクト指向JavaScriptの原則」
    https://www.amazon.co.jp/dp/4873116813
    が、大変参考になります。というか僕もこれでprototypeベースの
    オブジェクト指向を勉強してから、コアスクリプトは読みましたから。
    この本は、ツクールMVのコアスクリプトを理解したい人には、
    ぜひおすすめの本でもあります。

    そして最後に必要なのが、コアスクリプトを読みこなす「根気」です。
    いろいろあちこちに解説は出ていますが、僕が思うに一番必要なのは、
    「自分のものにしたい」っていう「主体性」だと思います。
    とにかく分量が多いので、テクニックはあちこちで語られていますが、
    テクニックが云々よりも「諦めない気力」の方が僕は大切かな、と思っています。

    以上、ご武運を。
    いろいろ書きましたが、このようにハードルが高いため、
    何かあったら、慣れるまではフォーラムに書き込むと、
    高確率で誰かが答えてくれると思います。
    ここは、そういう人のための場所なんだ、って思って、
    多いに活用してください。
     
    最後に編集: 2019-01-03
    #12
    こまどり乳酸菌, まっつUPonaka0128 がいいね!しています
  13. onaka0128

    onaka0128 ユーザー

    神無月サスケ様返信ありがとうございます!


    なるほど、勉強してJavascriptを理解するには相当骨が折れそうです。
    神無月サスケ様が貼って下さったリファレンスとオススメの本を購入して読んでその他の本も買い足しつつ勉強していきたいと思います!

    そうですね、確かに膨大なあのスクリプト群を読み込むのは相当な根気がいりそうです。心して戦ってきます!

    分かりました、またつまづいて一人で解決できない場合は質問させていただきます!
    、その時はよろしくお願い致します!ありがとうございました!
     
    #13
    こまどり乳酸菌, まっつUP神無月サスケ がいいね!しています

このページを共有