【解決】ショップ画面にて、初期表示時にヘルプウィンドウが表示されない

ミノン
記事: 39
登録日時: 2016年8月06日(土) 17:02
連絡を取る:

【解決】ショップ画面にて、初期表示時にヘルプウィンドウが表示されない

投稿記事by ミノン » 2016年10月06日(木) 23:22

 お世話になっております。ミノンと申します。

 現在、「JK_DirectShop.js」を使おうかな?と思ってダウンロードしたのは良かったのですが...。画面を開いた直後、何故かアイテムのヘルプウィンドウが表示されません。

 原因を調べてみたのですが、よく分からず...。呼ばれている関数は途切れ途切れ分かるのですが、何がどうやって呼ばれているのか分かりません。
 ①Window_Helpの「setItem関数」の呼出し
 ②Window_Selectableの「updateHelp関数」の呼出し
 ③Window_Helpの「refresh関数」の呼出し(※ここで【this._text】の値が空白になっているため、ヘルプウィンドウが空白のようです)

 今後の開発でも同様の事が起きる可能性も捨てきれないので、以下2つを質問させて下さいです。
 (1)JK_DirectShop.jsを使ってショップ画面を呼び出すときに、どうやったらヘルプウィンドウが表示されるのか?
 (2)Scene_Shopにて、どういう順番で①・②・③が呼ばれているのか知りたい。

 今後、同様の開発を行う際に重要になってくるので是非とも教えて下さい。宜しくお願いしますですm(_ _)m
添付ファイル
JK_DirectShop.js
(9.7 KiB) ダウンロード数: 7 回
mn_6.png
最後に編集したユーザー ミノン on 2016年10月10日(月) 20:52 [ 編集 1 回目 ]

▼ブログ「猫民の詩」▼
http://b.dlsite.net/RG33478/
アバター
まっつUP
記事: 1155
登録日時: 2016年8月11日(木) 15:38
お住まい: タケノコ王国

Re: ショップ画面にて、初期表示時にヘルプウィンドウが表示されない

投稿記事by まっつUP » 2016年10月08日(土) 12:41

ミノン様
お世話になります。

質問の趣旨と若干異なりますが修正できたっぽいので書いておきます。
JK_DirectShop.jsの129行目
this._categoryWindow.setHelpWindow(this._helpWindow);をコメントアウトしたら表示されました。

原理は分かりません。なぜか動くっていうやつです。
(他の不具合起こったらすみません。)
RPGで笑顔を・・・

ツイッター(ツクラーの巣窟)(閲覧は自己責任でお願いします)
https://twitter.com/mattuup

github
https://github.com/mattuup/RPGMakerMZ
奏ねこま
記事: 702
登録日時: 2016年1月20日(水) 20:04

Re: ショップ画面にて、初期表示時にヘルプウィンドウが表示されない

投稿記事by 奏ねこま » 2016年10月08日(土) 19:42

updateHelp関数はいろんなタイミングで呼ばれていて、1つ1つ説明していてはキリがないので
いくつかポイントを絞って説明させてもらいます。

デフォルト(プラグイン未使用時)の場合、アイテムのヘルプが表示される最初のタイミングは、
Scene_ShopのcommandBuy関数が実行されたときです。
(Window_ShopBuyのactivate関数→reselect関数→select関数→callUpdateHelp関数)

プラグインではScene_Shopのcreate関数の中でcommandBuy関数を実行していますので(245行目)、
期待する動作としては、ここでヘルプウインドウにアイテム説明が表示されてほしいところです。

では「何故表示されないのか」。それはcreateCategoryWindow関数実行の過程で消されているから、です(251行目)。
createCategoryWindow関数はsetHelpWindow関数でヘルプウインドウを設定していますが、
このときupdateHelp関数が呼ばれます。この関数は、デフォルトでは「ヘルプウインドウをクリアする処理」です。
なので消えます。

setHelpWindow関数が理由でヘルプが消えるなら、createSellWindow関数実行(252行目)は問題ないの?という疑問が出ますが、
ここで実行されるsetHelpWindow関数からは、updateHelp関数が呼ばれません。
理由は、SellWindowは初期状態がdeactiveだからです。updateHelp関数はactiveのときにだけ呼ばれます。
CategoryWindowは初期状態がactiveなので呼ばれてしまいました。
(各ウインドウの初期状態がactiveなのかdeactiveなのかは、以前、ミノンさんのブログのほうでちょろっと説明させて頂きました)

以上が、本件についてのざっくりとした説明になります。
以下、補足。

・Window_ShopBuyのupdateHelp関数
 updateHelp関数は「デフォルトではヘルプウインドウをクリアする処理」と書きましたが、
 Window_ShopBuyは処理が異なり、「選択中のアイテムをヘルプウインドウに設定する処理」になっています。

・updateHelp関数が呼ばれる可能性があるポイント(ウインドウや条件による)
 setHelpWindow関数実行時
 select関数
 activate関数、deactivate関数実行時(select関数を呼ぶものがある)
 (他にもあると思いますが、注意しておきたいポイントとして)
奏ねこま
記事: 702
登録日時: 2016年1月20日(水) 20:04

Re: ショップ画面にて、初期表示時にヘルプウィンドウが表示されない

投稿記事by 奏ねこま » 2016年10月08日(土) 22:39

解決方法はまっつUPさんが提示されているので、余談になりますが、
「deactiveならsetHelpWindow時にupdateHelpが呼ばれない」ので、
127行目のdeactivateをsetHelpWindowの上に移動することでも一応対応できます。
setHelpWindowの削除が憚られる場合はご検討ください。
ミノン
記事: 39
登録日時: 2016年8月06日(土) 17:02
連絡を取る:

Re: ショップ画面にて、初期表示時にヘルプウィンドウが表示されない

投稿記事by ミノン » 2016年10月10日(月) 11:03

>まっつUPさん

お世話になります、ミノンです。
ご返答くださりありがとうございました。
まっつUP様のおっしゃる通りにすると、期待通りの結果を得ることが出来ました。
createCategoryWindow関数のsetHelpWindow関数ですか...。

でも何でなんでしょうね...。回答は、奏ねこま(@こま)さんが書いてくださっていますが...。
なんか消化不良といった感じがあります。
▼ブログ「猫民の詩」▼
http://b.dlsite.net/RG33478/
ミノン
記事: 39
登録日時: 2016年8月06日(土) 17:02
連絡を取る:

Re: ショップ画面にて、初期表示時にヘルプウィンドウが表示されない

投稿記事by ミノン » 2016年10月10日(月) 18:06

>奏ねこま(@こま)さん

 いつもお世話になっております。
 成程、createCategoryWindow関数のsetHelpWindow関数が原因でしたかw

 奏ねこま(@こま)さんの説明は、いつも分かりやすくて助かっております。ありがとうございます。
 しかし、今回は以下のような疑問が残ります。
 commandBuy関数は、確かにScene_Shopのcreate関数内で呼び出されています。しかし実行されるのは、okボタンを起動したときのように認識しております。
 それに比べて、Scene_ShopのcreateCategoryWindow関数はcreate関数内で呼び出され実行されているように認識しています。
 即ち、呼び出すタイミングが異なるように思うんです。

 呼び出しのイメージは以下のような形という風に考えておりますが、違うんですかね...。
  createCommandWindow関数→...→createCategoryWindow関数→createSellWindow関数
   ・createCommandWindow関数にて、['buy']コマンドが起動した場合→commandBuy関数の呼び出し。

 上記のように考えているので、createCommandWindow関数内で['buy']コマンドが実行された場合と、createCategoryWindow関数が実行された場合は処理が関係無いように思うのですが...。
▼ブログ「猫民の詩」▼
http://b.dlsite.net/RG33478/
奏ねこま
記事: 702
登録日時: 2016年1月20日(水) 20:04

Re: ショップ画面にて、初期表示時にヘルプウィンドウが表示されない

投稿記事by 奏ねこま » 2016年10月10日(月) 18:53

奏ねこま(@こま) さんが書きました:プラグインではScene_Shopのcreate関数の中でcommandBuy関数を実行していますので(245行目)、
期待する動作としては、ここでヘルプウインドウにアイテム説明が表示されてほしいところです。

ここ、読まれました?
ミノン
記事: 39
登録日時: 2016年8月06日(土) 17:02
連絡を取る:

Re: ショップ画面にて、初期表示時にヘルプウィンドウが表示されない

投稿記事by ミノン » 2016年10月10日(月) 20:16

>奏ねこま(@こま)さん

 読みましたけど...。実行しているというのが、納得いかないんです...。
 
プラグインではScene_Shopのcreate関数の中でcommandBuy関数を実行していますので


 create関数のsetHandlerメソッドでは「this._handlers」配列の中に内容を格納しているだけだと思っています。その後、createCategoryWindow関数を呼び出す。その後、「commandBuy関数」を実行するという手順だと思っています。

 そういうもんなんだ、と無理やり飲み込むしかないのでしょうか...。
▼ブログ「猫民の詩」▼
http://b.dlsite.net/RG33478/
奏ねこま
記事: 702
登録日時: 2016年1月20日(水) 20:04

Re: ショップ画面にて、初期表示時にヘルプウィンドウが表示されない

投稿記事by 奏ねこま » 2016年10月10日(月) 20:20

245行目、と示しているので、実際に245行目を見てください。
setHandlerは関係ありません。

「プラグインでは」と言っているように、私はJK_DirectShop.jsの話をしていますが、
その認識は大丈夫でしょうか?
ミノン
記事: 39
登録日時: 2016年8月06日(土) 17:02
連絡を取る:

Re: ショップ画面にて、初期表示時にヘルプウィンドウが表示されない

投稿記事by ミノン » 2016年10月10日(月) 20:50

>奏ねこま(@こま)さん

 すみません、ごめんなさいです。確かにそのような記載になっていました。
 本当に申し訳ないですm(_ _)m

 JK_DirectShop.jsとScene_Shopの処理がごちゃごちゃになっていました。申し訳ないですm(_ _)m

 本当にすみませんでした。
 そして分かりやすい回答ありがとうございましたm(_ _)m
▼ブログ「猫民の詩」▼
http://b.dlsite.net/RG33478/

“MV:質問” へ戻る