ページ 12

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

Posted: 2019年2月06日(水) 03:11
by にゃたま
こんばんは。

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

スクリプトを色々漁ってみましたがわかりませんでした。
$gameMap.isなんちゃらというスクリプトを想定していましたがそれが見当たらず…orz
マップ名が表示されたらtrue消えたらfalseのスクリプトを知ってる方いましたら教えてくださると嬉しいです。

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

Posted: 2019年2月06日(水) 03:59
by しぐれん
Window_MapNameで表示されていますね。
制御に関しては、Scene_Mapにあります。

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

Posted: 2019年2月06日(水) 09:23
by にゃたま
しぐれん様

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


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

追記
…それかその関数の返り値から値がとれるんでしょうか?
条件分岐のスクリプトに記載できるような形式が好ましいです。

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

Posted: 2019年2月06日(水) 10:19
by 剣崎 宗二
表示の有否をtrue falseで返してくれるfunctionはWindow_MapNameには存在致しません。
これは表示方法がフェードイン、アウトによる透明度の変化によって行われているからですね。

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

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

Posted: 2019年2月06日(水) 11:23
by にいやん
マップ名の再表示、もしくは強制的に消すなら一応スクリプトで制御できますがそういう単純なことを言っているわけではないのかな?

コード: 全て選択

SceneManager._scene._mapNameWindow.open();
SceneManager._scene._mapNameWindow.close();

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

Posted: 2019年2月06日(水) 11:49
by にゃたま
剣崎 宗二様

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


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

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


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

追記
rpg_windows.jsのバージョンを記載し忘れました。v1.6.1です。
これ以外だと行数が異なるかもしれません。

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

Posted: 2019年2月06日(水) 12:17
by astral
こんにちは。

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

コード: 全て選択

(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);
    };

})();


追記
プラグインでスイッチに反映させるようにしました。

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

Posted: 2019年2月06日(水) 12:34
by 剣崎 宗二
visibleはWindow_MapNameの継承元であるWindow_Baseから存在します。(より正確にはpixi.jsレベルから存在しております)
.hide()および.show()により制御されております。
Window_MapNameの一部のfunctionにて.hide()が呼び出されているためこれも確認する必要があるのではないかと判断しました。

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

Posted: 2019年2月06日(水) 12:47
by にゃたま
astral様

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

SceneManager._scene._mapNameWindow._showCount > 0

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

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

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

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

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

Posted: 2019年2月06日(水) 13:18
by astral
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()の表示名の設定関係なく、透明状態で表示されている仕様でした。
これも条件分岐のスクリプトに必要ですね。