【解決済み】マップ名表示中のスクリプトについて

アバター
にゃたま
記事: 837
登録日時: 2016年1月13日(水) 23:53
お住まい: 床下の猫王国-すみませんが体調悪いのでサポートはお休みさせていただきます
連絡を取る:

【解決済み】マップ名表示中のスクリプトについて

投稿記事by にゃたま » 2019年2月06日(水) 03:11

こんばんは。

マップ名を表示させている時、画面にマップが表示されている状態を認識したいです。
何がしたいかというとマップ名が表示されているとマップ名の下にある画像が隠れたり
マップ名そのものが見づらくなってしまう為、
マップ名が消えたら表示させる処理を入れたいと思います。

スクリプトを色々漁ってみましたがわかりませんでした。
$gameMap.isなんちゃらというスクリプトを想定していましたがそれが見当たらず…orz
マップ名が表示されたらtrue消えたらfalseのスクリプトを知ってる方いましたら教えてくださると嬉しいです。
最後に編集したユーザー にゃたま on 2019年2月06日(水) 22:15 [ 編集 1 回目 ]

アバター
しぐれん
記事: 973
登録日時: 2017年3月28日(火) 22:22
連絡を取る:

Re: マップ名表示中のスクリプトについて

投稿記事by しぐれん » 2019年2月06日(水) 03:59

Window_MapNameで表示されていますね。
制御に関しては、Scene_Mapにあります。
現在、プラグイン依頼はお休み中です。
アバター
にゃたま
記事: 837
登録日時: 2016年1月13日(水) 23:53
お住まい: 床下の猫王国-すみませんが体調悪いのでサポートはお休みさせていただきます
連絡を取る:

Re: マップ名表示中のスクリプトについて

投稿記事by にゃたま » 2019年2月06日(水) 09:23

しぐれん様

しぐれん さんが書きました:Window_MapNameで表示されていますね。
制御に関しては、Scene_Mapにあります。


お返事ありがとうございます。せっかく教えて頂いて申し訳ですが…そのWicdow_MapNameだとそれは関数名であってtrue , false の値が取れないので、変数名で教えて頂けないでしょうか?正確にはその関数の中から変数が見つけられなかったということになります。

追記
…それかその関数の返り値から値がとれるんでしょうか?
条件分岐のスクリプトに記載できるような形式が好ましいです。
アバター
剣崎 宗二
記事: 680
登録日時: 2016年11月12日(土) 20:36
連絡を取る:

Re: マップ名表示中のスクリプトについて

投稿記事by 剣崎 宗二 » 2019年2月06日(水) 10:19

表示の有否をtrue falseで返してくれるfunctionはWindow_MapNameには存在致しません。
これは表示方法がフェードイン、アウトによる透明度の変化によって行われているからですね。

基本contentsOpacity > 0かつvisible = trueなら表示されている、どちら片方でも条件から外れていたら表示されていない、と言う扱いだと考えます。
----
-出先に居る場合回答が未テスト状態である事が多い為、テストは重々にお願いいたします。
-基本自分や友人の問題解決は自分で1からプラグインを書いているので、「こういうプラグインはありますか」に対しては助けになれません。ご了承ください。
アバター
にいやん
記事: 218
登録日時: 2016年7月02日(土) 00:38
お住まい: 地獄4丁目西のゴミ置き場
連絡を取る:

Re: マップ名表示中のスクリプトについて

投稿記事by にいやん » 2019年2月06日(水) 11:23

マップ名の再表示、もしくは強制的に消すなら一応スクリプトで制御できますがそういう単純なことを言っているわけではないのかな?

コード: 全て選択

SceneManager._scene._mapNameWindow.open();
SceneManager._scene._mapNameWindow.close();
アバター
にゃたま
記事: 837
登録日時: 2016年1月13日(水) 23:53
お住まい: 床下の猫王国-すみませんが体調悪いのでサポートはお休みさせていただきます
連絡を取る:

Re: マップ名表示中のスクリプトについて

投稿記事by にゃたま » 2019年2月06日(水) 11:49

剣崎 宗二様

剣崎 宗二 さんが書きました:基本contentsOpacity > 0かつvisible = trueなら表示されている、どちら片方でも条件から外れていたら表示されていない、と言う扱いだと考えます。


透明度の変化のみであることを了解しました。
contentsOpacityという変数はrpg_window.js内4650行付近にあるWindow_MapName内に
あるのは発見できましたがこの中にvisibleという変数が発見できませんでした。
全く別のところにあるのでしょうか?

また、別のプラグインからその値を参照するにはどのように書けばよいでしょうか?


にいやん様
すみません、マップ名を消したいわけではないのです。マップ名が現在表示されているかを確認したいのです。
ですがそちらのスクリプトに関しては大変勉強になりました。ありがとうございました。

追記
rpg_windows.jsのバージョンを記載し忘れました。v1.6.1です。
これ以外だと行数が異なるかもしれません。
astral
記事: 106
登録日時: 2018年11月14日(水) 00:21
連絡を取る:

Re: マップ名表示中のスクリプトについて

投稿記事by astral » 2019年2月06日(水) 12:17

こんにちは。

プラグイン化することで、マップ名表示中に指定したスイッチ番号をオンに、非表示になった場合にオフになります。

コード: 全て選択

(function () {
    'use strict';

    /** スイッチ番号を指定 */
    var switchId = 1;

    var _Window_MapName_open = Window_MapName.prototype.open;
    Window_MapName.prototype.open = function() {
        _Window_MapName_open.apply(this, arguments);
        if ($gameMap.displayName()) $gameSwitches.setValue(switchId, true);
    };

    var _Window_MapName_close = Window_MapName.prototype.close;
    Window_MapName.prototype.close = function() {
        _Window_MapName_close.apply(this, arguments);
        if ($gameSwitches.value(switchId)) $gameSwitches.setValue(switchId, false);
    };

    var _Window_MapName_updateFadeOut = Window_MapName.prototype.updateFadeOut;
    Window_MapName.prototype.updateFadeOut = function() {
        _Window_MapName_updateFadeOut.apply(this, arguments);
        if ($gameSwitches.value(switchId)) $gameSwitches.setValue(switchId, false);
    };

})();


追記
プラグインでスイッチに反映させるようにしました。
最後に編集したユーザー astral on 2019年3月26日(火) 18:18 [ 編集 2 回目 ]
アバター
剣崎 宗二
記事: 680
登録日時: 2016年11月12日(土) 20:36
連絡を取る:

Re: マップ名表示中のスクリプトについて

投稿記事by 剣崎 宗二 » 2019年2月06日(水) 12:34

visibleはWindow_MapNameの継承元であるWindow_Baseから存在します。(より正確にはpixi.jsレベルから存在しております)
.hide()および.show()により制御されております。
Window_MapNameの一部のfunctionにて.hide()が呼び出されているためこれも確認する必要があるのではないかと判断しました。
----
-出先に居る場合回答が未テスト状態である事が多い為、テストは重々にお願いいたします。
-基本自分や友人の問題解決は自分で1からプラグインを書いているので、「こういうプラグインはありますか」に対しては助けになれません。ご了承ください。
アバター
にゃたま
記事: 837
登録日時: 2016年1月13日(水) 23:53
お住まい: 床下の猫王国-すみませんが体調悪いのでサポートはお休みさせていただきます
連絡を取る:

Re: マップ名表示中のスクリプトについて

投稿記事by にゃたま » 2019年2月06日(水) 12:47

astral様

ありがとうございました。解決致しました。

SceneManager._scene._mapNameWindow._showCount > 0

というスクリプトが求めていたものでした。
_showCountにアクセスするのにSceneManager._scene._mapNameWindow.が必要だったんですね。
これがわからなくて悪戦苦闘してました。これこそまさしくビンゴといった具合で助かりました。

$gameMap.isNameDisplayEnabled()はおそらくマップ名表示が有効であるかのbool値かと思うのですが
当方、常にマップ名表示有効にしてますがこれは必要なのでしょうか?

あと条件に$gameMap.displayName()もないとエディタでマップ名に記載がされてない状態でも
マップ名が存在していると認識してしまうようです。

剣崎 宗二様
visibleについて詳しくおしえていただきありがとうございました。大変勉強になります。
その程度のこともわからない無知な私をお許しくださいorz
それにしてもWindow_Baseのような大本にあるプロパティくらいは知っておく必要ありますね<今更
.hide()でvisibleをfalseに、.show()でtrueにする感じですね!了解しました。心得ておきます。
astral
記事: 106
登録日時: 2018年11月14日(水) 00:21
連絡を取る:

Re: マップ名表示中のスクリプトについて

投稿記事by astral » 2019年2月06日(水) 13:18

SceneManager._sceneについては、

Scene_Map.prototype.createMapNameWindow = function() {
this._mapNameWindow = new Window_MapName();
this.addChild(this._mapNameWindow);
};

Scene_MapのthisがSceneManager._sceneになっているので、
SceneManager._scene._mapNameWindowで参照できます。

$gameMap.isNameDisplayEnabled()は、Window_MapNameの仕様や競合含めて、
マップ名が非表示なのに_showCountが1以上のまま減らない場合もあるため入れています。

$gameMap.displayName()の表示名の設定関係なく、透明状態で表示されている仕様でした。
これも条件分岐のスクリプトに必要ですね。

“MV:質問” へ戻る