【一旦解決】SceneCustomMenuの使い方でお聞きします

ヒグラシ
記事: 94
登録日時: 2019年8月03日(土) 21:00

【一旦解決】SceneCustomMenuの使い方でお聞きします

投稿記事by ヒグラシ » 2020年6月19日(金) 17:42

トリアコンタン様のSceneCustomMenuを利用させていただいてます。
どうしてもアイテム詳細ウィンドウが更新されないので自分のやり方が間違っていると思いますので
教えていただけると嬉しいです。
画面左側にアイテムリストを表示して画面右側にアイテムの詳細を表示したいと思います。

ウィンドウ一覧のプラグインパラメータは以下のようにしました。
ウィンドウ識別子:item_window
X座標:0
Y座標:108
横幅:350
高さ:516
列数:1
行数:0
項目の高さ:0
一覧取得スクリプト:$gameParty.allItems();
項目描画スクリプト:this.drawItemName(item, r.x, r.y, r.width); // アイテムやスキルの名称
選択可能スクリプト:item.itypeId === 1; // アイテムタイプが[通常アイテム]
カーソルイベントのウィンドウ識別子:item_detail
インデックス格納変数:2

ウィンドウ識別子:item_detail
X座標:0
相対X座標ウィンドウ:item_window
Y座標:108
横幅:466
高さ:516
列数:1
行数:0
項目の高さ:0
一覧取得スクリプト:$gameParty.allItems()[$gameVariables.value(2)];
項目描画スクリプト:this.drawText(`アイテム名:${item.name}`, r.x, r.y, r.width, 'left'); // 任意のテキスト描画(制御文字変換なし。右揃え)
this.drawText(`${item.meta.text}`, r.x, r.y + 35, r.width, 'left'); // 任意のテキスト描画(制御文字変換なし。右揃え)

この設定でカーソルを動かして(決定ボタンを押さず)異なるアイテムを選択して
右側にリストから選択したアイテムを表示したいですが更新されないようでした。
再描画スイッチの設定などいろんな設定を試みましたがどうしてもできませんでした(泣)
決定ボタンを押さずとも詳細画面に反映する方法はあるのでしょうか?
因みにアイテムのメモ欄にtextタグが設定されていてそれを表示しようと思います。
カーソルインデックス変数は2に設定してそれを一覧取得スクリプト($gameParty.allItems()[$gameVariables.value(2)];)で表示しようとしています。

追記>
追加でアイテムのメモ欄に画像ファイル名を設定してそれぞれのアイテム画像を
アイテム詳細ウィンドウに表示したいと思うのですがどのようにすれば画像表示できるでしょうか?
最後に編集したユーザー ヒグラシ on 2020年7月10日(金) 19:13 [ 編集 1 回目 ]

アバター
トリアコンタン
記事: 2311
登録日時: 2015年11月10日(火) 21:13
お住まい: きのこ王国
連絡を取る:

Re: SceneCustomMenuの使い方でお聞きします

投稿記事by トリアコンタン » 2020年6月21日(日) 16:10

こんにちは!

『一覧ウィンドウで選択している内容の詳細情報を表示する』という要件は一般化できそうでしたので、試行錯誤していただいたところ恐縮ですが、こちらで機能を提供することにしました。
よろしければお試しください。

1.6.0 2020/06/21 項目描画で指定したメモ欄のピクチャを表示できる機能を追加
別の一覧ウィンドウの詳細情報を表示するウィンドウの作成を支援する機能を追加
https://raw.githubusercontent.com/triacontane/RPGMakerMV/master/SceneCustomMenu.js
プラグイン関連のトラブルが発生した際の切り分けと報告の方法です。
http://qiita.com/triacontane/items/2e227e5b5ce9503a2c30

[Blog] : http://triacontane.blogspot.jp/
[Twitter]: https://twitter.com/triacontane/
[GitHub] : https://github.com/triacontane/
ヒグラシ
記事: 94
登録日時: 2019年8月03日(土) 21:00

Re: SceneCustomMenuの使い方でお聞きします

投稿記事by ヒグラシ » 2020年6月22日(月) 21:43

トリアコンタン様

お忙しいなか機能追加いただきありがとうございました。
素晴らしいです。ウィンドウ内にリストで選択したアイテム名や説明、画像を表示することができました。
ただメモ欄に書いた説明のテキストは改行が機能しないようでした。
単純にリターンキーだけで改行は無理ですか?(念の為\nも試したのですが駄目でした)

あとわからない点が「コマンドリスト」でこのリスト内に「使う」「調べる」「組み合わせ」「捨てる」「やめる」
のボタンを設置したいのですが「やめる」は「キャンセル選択肢」として設定するだけですが
他のコマンドがどう分岐すればよいのかわかりません。
コマンドリストのボタンごとにシーンを開いたり、ウィンドウを開いたり異なるコモンイベントを起動したり
することはできないのでしょうか?
若しくは「はい」「いいえ」のみの2択を想定したコマンドリストということでしょうか?

前提としてこのシーンを通常のアイテムメニューの代わりにと考えています。
特定のボタンで直接表示するかイベントの選択肢などで表示するかは現時点では未定です。
・「使う」コマンドは単純にアイテムに設定されたコモンイベントを実行するだけでアクターへのパラメータの変更は無視します。
というのも現在想定中のゲームのキャラクターにHPやMP等ステータスという概念はないためです。
その為、アイテムの使用効果に設定されたコモンイベントのみ実行できれば問題ないと考えます。
・「調べる」はコモンイベントからアイテム画像を全画面に表示して選択肢から調べる箇所を選択するか
ピクチャボタン化プラグインを使うなどしてパーツのマウスクリックで調べる仕様にしようと思います。
この場合は単純にコモンイベントを実行できれば大丈夫そうです。
・「組み合わせ」はバイオ○ザードのようなアイテムを組み合わせる機能です。
2つのアイテムをリストから選んで最後にコモンイベントが実行できれば可能だと思います。
よってこれは別シーンとして作成する予定です。シーンを切り替えれる必要があります。
・「捨てる」コマンドに関して数値入力をどうしたらいいのかでちょっと悩んでいます。
上述のとおり通常のアイテムメニューの代わりにと考えているので捨てる機能追加のプラグインは使えません。
アイテムを捨てる機能(若しくは数値入力の機能)をプラグイン側で用意するような事は難しいでしょうか?

上記は現状、仮の仕様ですができるかできないかを模索している段階になります。
通常のアイテムメニューからできない色々な処理が可能になるので大変便利な神プラグインです。
いつもありがとうございます。アドバイスなどいただけますと嬉しいです。

<追記>
一覧取得スクリプトに$dataItems[$gameVariables.value(5)];として
ゲーム変数5に数値を代入しておいて表示できるか確認しましたが
項目描画スクリプトでヒットしないようで空欄になってしまいました。
$dataItems[5];のように実数を代入して試したら5番のアイテムが表示されたので
$gameVariables.value(5)のようにゲーム変数を指定することはできないのでしょうか?
アバター
トリアコンタン
記事: 2311
登録日時: 2015年11月10日(火) 21:13
お住まい: きのこ王国
連絡を取る:

Re: SceneCustomMenuの使い方でお聞きします

投稿記事by トリアコンタン » 2020年6月24日(水) 23:32

あとわからない点が「コマンドリスト」でこのリスト内に「使う」「調べる」「組み合わせ」「捨てる」「やめる」
のボタンを設置したいのですが「やめる」は「キャンセル選択肢」として設定するだけですが
他のコマンドがどう分岐すればよいのかわかりません。


こちらですが『インデックス可能変数』に値を指定しておいて、決定時のコモンイベントから『インデックス可能変数』の値をもとに分岐するかたちになると思います。

その後の捨てたり組み合わせたりする処理は『スクリプト』を含めたイベントコマンドを駆使して構築します。数値入力の処理は、おそらくイベントコマンドから実行できると思います。

$dataItems[$gameVariables.value(5)]

こちらは機能する想定ですが、変数[5]に0が入っている状態だと何も表示されないのでそのせいかもしれません。
プラグイン関連のトラブルが発生した際の切り分けと報告の方法です。
http://qiita.com/triacontane/items/2e227e5b5ce9503a2c30

[Blog] : http://triacontane.blogspot.jp/
[Twitter]: https://twitter.com/triacontane/
[GitHub] : https://github.com/triacontane/
ヒグラシ
記事: 94
登録日時: 2019年8月03日(土) 21:00

Re: SceneCustomMenuの使い方でお聞きします

投稿記事by ヒグラシ » 2020年6月27日(土) 12:13

トリアコンタン様

こちらですが『インデックス可能変数』に値を指定しておいて、決定時のコモンイベントから『インデックス可能変数』の値をもとに分岐するかたちになると思います。


こちらのやり方でできました。ありがとうございます!

その後の捨てたり組み合わせたりする処理は『スクリプト』を含めたイベントコマンドを駆使して構築します。数値入力の処理は、おそらくイベントコマンドから実行できると思います。


捨てるをコモンイベントで行ったらイベントコマンドで数値入力できました。
このプラグインはコモンイベントをマップに戻らずして実行可能ということで非常に画期的です。
数値入力後その数値をもとに
$gameParty.loseItem($dataItems[$gameVariables.value(6)], $gameVariables.value(9))
のようにして所持アイテムから入力された数の個数を減らしました。
コモンイベントが終わるとメニューに戻りますがこのときアイテムの個数が0になったにもかかわらず
アイテムがリストから消えませんでした。
一旦メニューを終了し再度表示すると当該アイテムは表示されなかったので
恐らくメニューに戻った際リストのリフレッシュ処理がされてないのだと思います。
リフレッシュ処理はどのようにすべきでしょうか?

あと、リスト内にアイテム所持数を右寄せで入れたいのですがどうすればできますか?
//this.drawText(`${item.「所持アイテム数」}`, r.x, r.y, r.width, 'right'); // 任意のテキスト描画(制御文字変換なし。右揃え)
自分でも考えましたが上記のように「所持アイテム数」のところに何をいれたらいいのかわかりませんでした。

というわけで
①コモンイベントでアイテム情報の変更を行い、メニューに戻った際のリフレッシュ処理をする方法
②所持アイテム数のスクリプトでの表記方法
上記2点をお聞かせ願えますでしょうか?

以上になります。よろしくおねがいします。

<追記>
恐らく前回追記した組み合わせ後に結果画面に空欄になって表示されなかったのもコモンイベント後に
リフレッシュ処理がされなかった為だと推測します。
コモンイベント後のリフレッシュ処理がされればその問題もクリアできるはずだと思います。
論理イヌ
記事: 186
登録日時: 2020年3月13日(金) 13:05

Re: SceneCustomMenuの使い方でお聞きします

投稿記事by 論理イヌ » 2020年6月27日(土) 15:26

横から回答失礼します。
私も同じプラグインを使っていたので、わかる範囲で協力させていただきます。

>①コモンイベントでアイテム情報の変更を行い、メニューに戻った際のリフレッシュ処理をする方法

「再描画スイッチ」というのが用意されています。
こちらにスイッチ番号を入力して、そのスイッチをONにするとリフレッシュ処理をすると思います。

再描画スイッチは下記のように説明されています。
「指定したスイッチがONになるとウィンドウが再描画されます。再描画の後、スイッチは自動でOFFになります。」

>②所持アイテム数のスクリプトでの表記方法

「ツクールMV アイテム所持数 スクリプト」などで検索すると、下記のスクリプトがヒットします。

コード: 全て選択

$gameParty.numItems($dataItems[アイテムID])

肝心のアイテムIDはどうやって手に入れるのかというと、
プラグインのヘルプに「変数[item]から各要素が参照できます」とあるので、itemの中の要素から取得します。
itemの中にどんな要素があるのかは、コンソールログで確認する必要があります。

$gameParty.allItems(); // 所持アイテム
一覧取得スクリプトで上記のスクリプトを設定していた場合、コンソールログで確認するため、
マップイベントで下記のように設定します

コード: 全て選択

◆アイテムの増減:きのこA + 1
◆アイテムの増減:きのこB + 1
◆スクリプト:console.log($gameParty.allItems());

ゲームのテストを実行すると、コンソールログで所持アイテムの情報が確認できます。
横向きの三角をクリックしていくと、添付ファイルのような画面になります。

「:」で区切られている左側が、参照できる要素です。
きのこAのアイテム番号が23番なので、「id:23」とある「id」が、アイテムidであるとわかります。

そのため、所持アイテム数のスクリプトは下記のようになります。

コード: 全て選択

this.drawText(`${$gameParty.numItems($dataItems[item.id])}`, r.x, r.y, r.width, 'right'); // 任意のテキスト描画(制御文字変換なし。右揃え)


こんなに長々と書きましたが、もっと簡単な方法があったら申し訳ありません。
土日で少しでもゲーム制作が進みますように!
添付ファイル
スクリーンショット 2020-06-27 14.49.49.png
スクリーンショット 2020-06-27 14.49.49.png (100.3 KiB) 閲覧数: 4715 回
ヒグラシ
記事: 94
登録日時: 2019年8月03日(土) 21:00

Re: SceneCustomMenuの使い方でお聞きします

投稿記事by ヒグラシ » 2020年6月27日(土) 20:00

論理イヌ様

ありがとうございます!おかげさまで今までわからなかったことが解決しました。

論理イヌ さんが書きました:「再描画スイッチ」というのが用意されています。
こちらにスイッチ番号を入力して、そのスイッチをONにするとリフレッシュ処理をすると思います。


やはり前回、一覧取得の結果、空欄になってしまっていたのはリフレッシュというか
再描画が有効になってなかったせいでした。変数としてはきちんと入っていましたが
再描画がされてないせいで表示されないという結論でした。
コモンイベント内でそれぞれのウィンドウごとに再描画スイッチをONにしてやる必要があるんですね…
この再描画スイッチはシーン設定で全てのウィンドウで強制的に再描画ONにする設定があると便利そうですね。
それぞれのウィンドウにこの設定があるのは再描画してほしくない場合がある為でしょうけど
再描画しないほうが良いケースが思い浮かばない…(1つあげるとするなら軽量化の為かな)

論理イヌ さんが書きました:「ツクールMV アイテム所持数 スクリプト」などで検索すると、下記のスクリプトがヒットします。

コード: 全て選択

$gameParty.numItems($dataItems[アイテムID])

肝心のアイテムIDはどうやって手に入れるのかというと、
プラグインのヘルプに「変数[item]から各要素が参照できます」とあるので、itemの中の要素から取得します。
itemの中にどんな要素があるのかは、コンソールログで確認する必要があります。

$gameParty.allItems(); // 所持アイテム
一覧取得スクリプトで上記のスクリプトを設定していた場合、コンソールログで確認するため、
マップイベントで下記のように設定します

コード: 全て選択

◆アイテムの増減:きのこA + 1
◆アイテムの増減:きのこB + 1
◆スクリプト:console.log($gameParty.allItems());

ゲームのテストを実行すると、コンソールログで所持アイテムの情報が確認できます。
横向きの三角をクリックしていくと、添付ファイルのような画面になります。

「:」で区切られている左側が、参照できる要素です。
きのこAのアイテム番号が23番なので、「id:23」とある「id」が、アイテムidであるとわかります。


ほしい要素はコンソールログで$gameParty.allItems();とすると一覧として見れるということで
ここからほしい要素を後ろに[]つけてその中にitem.idやitem.nameとすれば
それぞれの要素が取得できますね。これは勉強になりました。助言ありがとうございます。


論理イヌ さんが書きました:そのため、所持アイテム数のスクリプトは下記のようになります。

コード: 全て選択

this.drawText(`${$gameParty.numItems($dataItems[item.id])}`, r.x, r.y, r.width, 'right'); // 任意のテキスト描画(制御文字変換なし。右揃え)


これをそのまま項目描画スクリプトに追加したら解決しました。
あとで検索したらhttp://rpgmaker-script-wiki.xyz/conditionData_mv.phpのサイトに紹介されてました。
すみません。ありがとうございました。これもまた勉強になりました。

素晴らしいです。自分としても論理イヌ様に協力できることはさせていただきたいと思います。
お互い良いゲームが作れるようがんばりましょう。



あとはメモ欄の説明に改行が使えれば言うことないですが…
ということでこのやり方の情報をお待ちしています。

また他にもプラグインの使い方で不明点などあれば追記します。
最後に編集したユーザー ヒグラシ on 2020年7月06日(月) 21:40 [ 編集 1 回目 ]
論理イヌ
記事: 186
登録日時: 2020年3月13日(金) 13:05

Re: SceneCustomMenuの使い方でお聞きします

投稿記事by 論理イヌ » 2020年6月27日(土) 21:52

再描画の件、解決できてよかったです!
(使ったことない機能だったので、回答が合ってるかドキドキでした……。)


改行ですが、「制御文字変換なし」にしていませんか?
「制御文字変換あり」のほうにすると、私の環境ではエンターキーの改行が反映されました。

メモ欄にテキストがそのまま書いてある場合は、下記のコード。

コード: 全て選択

this.drawTextEx(`${item.note}`, r.x, r.y, r.width); // 任意のテキスト描画(制御文字変換あり)


メモ欄にテキストが
<text_a:あああ>
<text_b:いいい>
などと書いてあって、text_aを表示する場合は、下記のコード。

コード: 全て選択

this.drawTextEx(`${item.meta.text_a}`, r.x, r.y, r.width); // 任意のテキスト描画(制御文字変換あり)



オリジナルメニュー画面が理想通りできると、ワクワクしますよね。
お互いゲームが完成できるよう、がんばりましょう!
ヒグラシ
記事: 94
登録日時: 2019年8月03日(土) 21:00

Re: SceneCustomMenuの使い方でお聞きします

投稿記事by ヒグラシ » 2020年6月27日(土) 22:50

論理イヌ様

ありがとうございます。できました!!

結果的に以下で解決しました。
this.drawTextEx(`${item.meta.text}`, r.x, r.y + 40, r.width); // 任意のテキスト描画(制御文字変換あり)

リストで選択されたアイテムということでプリセットの「別ウィンドウで選択している項目名」を選択して
こうしないといけないと思っていたのです。
this.drawText(this.findWindowItem('item_list').meta.text, r.x, r.y + 40, r.width); // 別ウィンドウで選択している項目名

ですがこれですとExがないので制御文字変換なしになっていました。
制御文字対応にする必要があったんですね。ありがとうございました。

とりあえず現在不明な点は全て解決しました。
また出てくると思いますので再度不明な点があれば追記します。
システムが完成でき何も問題なくなれば解決済みとします。


あと論理イヌ様がご自身で質問なさっていたピクチャをシーンから出た後も維持したいといった内容ですが
確かにシーン中にコモンイベントからピクチャを表示してもシーンを閉じると消えてしまうみたいですね。
これは仕様だと思います。申し訳ないですが私ではちょっとわかりそうにないので
トリアコンタン様からの対応を待つしかないと思います。お力になれずすみません…
でももしなにかわかればそちらのトピックにお返事します。


<追伸>
…以下はあくまで希望的観測なんですが…
やはりウィンドウごとに再描画を設定するとなるとウィンドウの数分のスイッチが必要となり
ウィンドウが多いとスイッチ管理が大変になってしまいますので
シーンごとに強制的に再描画機能は欲しいような気がします。
最後に編集したユーザー ヒグラシ on 2020年7月06日(月) 21:40 [ 編集 1 回目 ]
論理イヌ
記事: 186
登録日時: 2020年3月13日(金) 13:05

Re: SceneCustomMenuの使い方でお聞きします

投稿記事by 論理イヌ » 2020年6月28日(日) 08:34

私の質問まで見ていただいてありがとうございます。
手立てがなければほかの方法を考えるので、
それはそれとして別の作業を進めています。


>やはりウィンドウごとに再描画を設定するとなるとウィンドウの数分のスイッチが必要となり

同時に再描画したいウィンドウの数だけスイッチを用意して、使いまわせば大丈夫だと思います。
おそらく1つか2つで十分?


1つのトピックで1つの質問の方がいいと思うので、このトピックは解決済みにしていただいたほうがいいかもです。
新しい困りごとがでたら、その都度トピックを作った方が、わかりやすいですからね!



***
プラグインを作成・機能追加してくださったトリアコンタンさん、ありがとうございます!!
「項目描画で指定したメモ欄のピクチャを表示できる機能」は私もすっっごく欲しかったので、うれしかったです!!
早速使っています!

“MV:質問” へ戻る