【解決済】メッセージウィンドウの位置を調整したい

hkaru
記事: 29
登録日時: 2021年3月21日(日) 13:37

【解決済】メッセージウィンドウの位置を調整したい

投稿記事by hkaru » 2021年4月08日(木) 17:53

マップ上で発生するメッセージウィンドウを、@paramで指定したピクセル分だけ上下左右に動かす機能を作りたいです。
プラグイン作成は初心者で調べてはいるのですが、最初のトッカカリとなる部分がつかめず、苦戦しています。

厚かましいお願いで申し訳ないのですが、後学のために
・処理の簡単なコメント
・調整するパラメータをどうやって見つけたか(到達までの思考経路的な?伝え方悪くてすみません・・・)
を残してくれると助かります。

お手数おかけしますが、助けていただけると幸いです。
添付ファイル
スクリーンショット 2021-04-08 174616.jpg
最後に編集したユーザー hkaru on 2021年4月09日(金) 10:05 [ 編集 1 回目 ]

アバター
ムノクラ
記事: 2011
登録日時: 2018年2月23日(金) 11:41
連絡を取る:

Re: メッセージウィンドウの位置を調整したい

投稿記事by ムノクラ » 2021年4月08日(木) 19:28

hkaru さんが書きました:マップ上で発生するメッセージウィンドウを、@paramで指定したピクセル分だけ上下左右に動かす機能を作りたいです。
プラグイン作成は初心者で調べてはいるのですが、最初のトッカカリとなる部分がつかめず、苦戦しています。

厚かましいお願いで申し訳ないのですが、後学のために
・処理の簡単なコメント
・調整するパラメータをどうやって見つけたか(到達までの思考経路的な?伝え方悪くてすみません・・・)
を残してくれると助かります。

お手数おかけしますが、助けていただけると幸いです。

簡単ですが作りました。

コード: 全て選択

/*:
 * @target MZ
 * @plugindesc 文章ウィンドウが下の時にオフセットさせます。
 * @author munokura
 *
 * @help
 * 文章ウィンドウが下の時にオフセットさせます。
 *
 *
 * @param offsetPosition
 * @text 文章ウィンドウオフセット量
 * @desc 文章ウィンドウが下の時にオフセットする量。
 * 正値で下、負値で上にオフセットします。
 */

(() => {
    "use strict";

    const pluginName = document.currentScript.src.split("/").pop().replace(/\.js$/, "");
    const parameters = PluginManager.parameters(pluginName);
    const offsetPosition = Number(parameters['offsetPosition'] || 0);

    const _Window_Message_updatePlacement = Window_Message.prototype.updatePlacement;
    Window_Message.prototype.updatePlacement = function () {
        this._positionType = $gameMessage.positionType();
        // console.log(this._positionType);
        // this._positionType // 上:0 / 中:1 下:2 と上記のログで分かる
        // 例えば下の時だけプラグインパラメーターで指定した分オフセットさせるとすると下記
        if (this._positionType === 2) {
            this.y = ((this._positionType * (Graphics.boxHeight - this.height)) / 2) + offsetPosition;
        } else {
            _Window_Message_updatePlacement.call(this);
        }
    };

    // 元のコード rmmz_windows.js 内
    // Window_Message.prototype.updatePlacement = function() {
    //     const goldWindow = this._goldWindow;
    //     this._positionType = $gameMessage.positionType();
    //     this.y = (this._positionType * (Graphics.boxHeight - this.height)) / 2;
    //     if (goldWindow) {
    //         goldWindow.y = this.y > 0 ? 0 : Graphics.boxHeight - goldWindow.height;
    //     }
    // };

})();

MNKR_MessageOffset.zip
(882 バイト) ダウンロード数: 61 回


作り方ですが、下記にまとめた記事があります。
ムノクラのプラグイン作成に関する9割の知識がまとまっていると思うので、そちらを読んでから質問いただいた方が話が早いかな?と思います。

https://fungamemake.com/archives/catego ... /guide-lv5

これを読んで、すぐに理解する人なら、最初のハードルは抜けて、ムノクラに応えられるような質問はなくなるかと…
逆に「記事のここが意味不明!」とご指摘いただけると、助かります。


この記事を書く知識を得るのに独学(コミュニティの人々のサポートあり)で3年かかりました…ITの学歴・職歴なし
---
JavaScriptの基本を学習せずにツクールのプラグインやスクリプトを使って横着してゲームを作ろうとしている人間です。
そのような者なので、適当な投稿をするかも知れません。
他の方の投稿を信用してください。
hkaru
記事: 29
登録日時: 2021年3月21日(日) 13:37

Re: メッセージウィンドウの位置を調整したい

投稿記事by hkaru » 2021年4月09日(金) 10:04

ムノクラ さんが書きました:
hkaru さんが書きました:マップ上で発生するメッセージウィンドウを、@paramで指定したピクセル分だけ上下左右に動かす機能を作りたいです。
プラグイン作成は初心者で調べてはいるのですが、最初のトッカカリとなる部分がつかめず、苦戦しています。

厚かましいお願いで申し訳ないのですが、後学のために
・処理の簡単なコメント
・調整するパラメータをどうやって見つけたか(到達までの思考経路的な?伝え方悪くてすみません・・・)
を残してくれると助かります。

お手数おかけしますが、助けていただけると幸いです。

簡単ですが作りました。

コード: 全て選択

/*:
 * @target MZ
 * @plugindesc 文章ウィンドウが下の時にオフセットさせます。
 * @author munokura
 *
 * @help
 * 文章ウィンドウが下の時にオフセットさせます。
 *
 *
 * @param offsetPosition
 * @text 文章ウィンドウオフセット量
 * @desc 文章ウィンドウが下の時にオフセットする量。
 * 正値で下、負値で上にオフセットします。
 */

(() => {
    "use strict";

    const pluginName = document.currentScript.src.split("/").pop().replace(/\.js$/, "");
    const parameters = PluginManager.parameters(pluginName);
    const offsetPosition = Number(parameters['offsetPosition'] || 0);

    const _Window_Message_updatePlacement = Window_Message.prototype.updatePlacement;
    Window_Message.prototype.updatePlacement = function () {
        this._positionType = $gameMessage.positionType();
        // console.log(this._positionType);
        // this._positionType // 上:0 / 中:1 下:2 と上記のログで分かる
        // 例えば下の時だけプラグインパラメーターで指定した分オフセットさせるとすると下記
        if (this._positionType === 2) {
            this.y = ((this._positionType * (Graphics.boxHeight - this.height)) / 2) + offsetPosition;
        } else {
            _Window_Message_updatePlacement.call(this);
        }
    };

    // 元のコード rmmz_windows.js 内
    // Window_Message.prototype.updatePlacement = function() {
    //     const goldWindow = this._goldWindow;
    //     this._positionType = $gameMessage.positionType();
    //     this.y = (this._positionType * (Graphics.boxHeight - this.height)) / 2;
    //     if (goldWindow) {
    //         goldWindow.y = this.y > 0 ? 0 : Graphics.boxHeight - goldWindow.height;
    //     }
    // };

})();

MNKR_MessageOffset.zip

作り方ですが、下記にまとめた記事があります。
ムノクラのプラグイン作成に関する9割の知識がまとまっていると思うので、そちらを読んでから質問いただいた方が話が早いかな?と思います。

https://fungamemake.com/archives/catego ... /guide-lv5

これを読んで、すぐに理解する人なら、最初のハードルは抜けて、ムノクラに応えられるような質問はなくなるかと…
逆に「記事のここが意味不明!」とご指摘いただけると、助かります。


この記事を書く知識を得るのに独学(コミュニティの人々のサポートあり)で3年かかりました…ITの学歴・職歴なし


早速の回答ありがとうございます!
コメントも大変参考になります。

なるほど、触る部分は
Window_Message.prototype.updatePlacement
だったんですね。

ずっと
Window_Message.prototype.initMembers
の項目を見ていました・・・

_positionTypeが上中下の表示位置なのかな~とあたりは付けていたのですが、
実際の表示位置を定義している場所が見つからずに迷ってました・・・
(Window_Message.prototype.updatePlacementに"goldWindow"の記載が集中していたので、
所持金周りの描画処理なのかなって思っていたのもあります。調査不足でした汗)

ムノクラ様のプラグイン講座は現在読み進めていますが、大変分かりやすく読めています。
その2とその3がかなり参考になってます!
こちらも不明点があれば質問させていただくかもしれませんが、よろしくお願いいたします。

“MZ:プラグイン素材のリクエスト” へ戻る