【解決済み】スクリプトによる「タッチUI設定」変更後に「数値入力の処理」でUIが表示されない問題

tsukihara

ユーザー
はじめまして。こちらツクール初心者で、解決方法を見つけられなかったので質問させていただきます。

【やりたいこと】
・マウス操作でプレイする人を考慮して、タッチUIをOFFに設定している場合でも
 数値入力画面にて強制的にUIを表示したい。

【現在の設定】
・タッチUIの設定を取得したのち、設定がOFFの場合にタッチUIをONにする。
・数値入力処理後、もともとのタッチUI設定がOFFだった場合はタッチUI設定をOFFに戻す。

【発生している問題】
・画像のように、UIの場所だけ確保されてタッチUIが表示されていない状態です。

以上、よろしくお願いいたします。
 

Attachments

  • setting.png
    setting.png
    175.1 KB · 閲覧: 6
  • problem.png
    problem.png
    87.6 KB · 閲覧: 6

まっつUP

ユーザー
tsukihara様
「現在の設定」の部分の実装が不利だと思います。数値入力関係の処理に干渉できていないと思います。
タッチUIの真偽にかかわらず数値入力ウインドウにボタンが表示されるのが好ましいかと思います。

十分に調べてはいないので定かではありませんが
Window_NumberInput.prototype.createButtonsを少なくとも確認する必要があり、
簡素なプラグインを作って導入するなどが良いと思います。
(それと比べた場合、数値入力の度に質問時のようなスクリプトコマンドによる実装は数値入力箇所が複数あると不利です。)
あるいは、数値入力以外にも該当の問題があれば、そもそもオプションにタッチUI項目を表示しないという手もあります。
 
最後に編集:

tsukihara

ユーザー
tsukihara様
「現在の設定」の部分の実装が不利だと思います。数値入力関係の処理に干渉できていないと思います。
タッチUIの真偽にかかわらず数値入力ウインドウにボタンが表示されるのが好ましいかと思います。

十分に調べてはいないので定かではありませんが
Window_NumberInput.prototype.createButtonsを少なくとも確認する必要があり、
簡素なプラグインを作って導入するなどが良いと思います。
(それと比べた場合、数値入力の度に質問時のようなスクリプトコマンドによる実装は数値入力箇所が複数あると不利です。)
あるいは、数値入力以外にも該当の問題があれば、そもそもオプションにタッチUI項目を表示しないという手もあります。
まっつUP様
ご返答ありがとうございます!

やはり、プラグインを作った方が早いですよね……。

十分に調べてはいないので定かではありませんが
Window_NumberInput.prototype.createButtonsを少なくとも確認する必要があり、
ツクールの仕様やプログラミングに詳しくないので見様見真似ですが、ご指摘いただいた箇所を参考にプラグインを作ってみました。
どこを変えればいいのかわからなかったので、助かりました!
一応、正常に動いているようなので解決済みとします。

下記が作成したプラグイン内容です。
書き方や間違っている箇所があるようでしたら、ご指導いただけると幸いです。
(() => {
//ショップ
Window_ShopNumber.prototype.createButtons = function() {
this._buttons = [];
for (const type of ["down2", "down", "up", "up2", "ok"]) {
const button = new Sprite_Button(type);
this._buttons.push(button);
this.addInnerChild(button);
}
this._buttons[0].setClickHandler(this.onButtonDown2.bind(this));
this._buttons[1].setClickHandler(this.onButtonDown.bind(this));
this._buttons[2].setClickHandler(this.onButtonUp.bind(this));
this._buttons[3].setClickHandler(this.onButtonUp2.bind(this));
this._buttons[4].setClickHandler(this.onButtonOk.bind(this));
}
//数値入力
Window_NumberInput.prototype.createButtons = function() {
this._buttons = [];
for (const type of ["down", "up", "ok"]) {
const button = new Sprite_Button(type);
this._buttons.push(button);
this.addInnerChild(button);
}
this._buttons[0].setClickHandler(this.onButtonDown.bind(this));
this._buttons[1].setClickHandler(this.onButtonUp.bind(this));
this._buttons[2].setClickHandler(this.onButtonOk.bind(this));
};

Window_NumberInput.prototype.windowHeight = function() {
return this.fittingHeight(1) + this.buttonSpacing() + 48;
};
})();
 
解決済みのようですが、一応、ベターな案をご紹介します。
それは、マップ上で、イベントコマンド「スクリプト」でタッチUIのON/OFFを行う方法です。
以下のトピックをご覧ください。

これを、数値入力の処理の前後に配置すれば、よろしいかと。

また、「現在タッチUIが有効かどうか」は ConfigManager['touchUI'] が true/false のどちらかで判別可能です。
つまり、条件分岐の「スクリプト」にして、内容を「ConfigManager['touchUI']」にすれば、いけます。

この方が、融通が利くかもしれません。
 
トップ