【解決済み】scaleからの拡大でゴミが出る問題

返信する
colombo
記事: 19
登録日時: 2018年7月24日(火) 07:01

【解決済み】scaleからの拡大でゴミが出る問題

投稿記事 by colombo »

コード: 全て選択

    Window_Message.prototype._refreshPauseSign = function() {
        Window.prototype._refreshPauseSign.call(this);
        
        this._pauseSignSprite.scale.x = 2;
        this._pauseSignSprite.scale.y = 2;
        this._pauseSignSprite.move(this._width - 70, this._height - 40);
    };
上記のようなコードを書いてポーズサインを拡大させるとスクショのようにゴミが表れる症状に悩んでいます。
1.jpg
2.jpg
等倍のときは問題ないのですが、少しでもscaleで拡大させるとゴミが出ます(ここではわかりやすく4倍にしています)
※ウィンドウスキンはデフォルトのものを使用しています。他プラグインは使用していません。

MVのときは同様のやり方で特に問題は出なかったのですが……
原因や解決方のわかる方がいらっしゃいましたら、どうかご教示くださいませ。
最後に編集したユーザー colombo [ 2021年3月11日(木) 01:22 ], 累計 2 回
アバター
くろうど
記事: 318
登録日時: 2016年1月22日(金) 20:52
お住まい: 東京都
連絡する:

Re: scaleからの拡大でゴミが出る問題

投稿記事 by くろうど »

こんにちは。

私の方ではポーズサインの拡大はしていないのですが、ポーズサインにゴミ(横線)が出る事象は発生し、解決したので、同じ方法で解決するかは分かりませんが、お知らせします。

■私の事象
行数を3行にしたかったので、メッセージWindowの高さを変えた。
すると、ポーズサインの矢印上部にゴミ(横線)が出た。

■対処方法
Windowの高さを偶数にした。
(wh を + 1 した)

■メモ
原因や理由は謎ですが、RPGツクールMZで、Windowの高さを奇数にしたり小数にしたりすると、時々ゴミ(横線)が出るようです。

ご確認ください。
▼だいたいTwitterにいます。たぶん。
https://twitter.com/kuroudo119
colombo
記事: 19
登録日時: 2018年7月24日(火) 07:01

Re: scaleからの拡大でゴミが出る問題

投稿記事 by colombo »

くろうど様、ご回答ありがとうございます!
早速、教えていただいたwhの値をいじってメッセージウインドウの高さを変えてみましたが、ゴミは消えませんでした……(そもそもwhの値は整数で偶数でした)

コード: 全て選択

Scene_Message.prototype.messageWindowRect = function() {
    const ww = Graphics.boxWidth;
    const wh = this.calcWindowHeight(4, false) + 8; //この行をプラスしてみたりした
    const wx = (Graphics.boxWidth - ww) / 2;
    const wy = 0;
    return new Rectangle(wx, wy, ww, wh);
};
■メモ
原因や理由は謎ですが、RPGツクールMZで、Windowの高さを奇数にしたり小数にしたりすると、時々ゴミ(横線)が出るようです。
自分も偶数じゃないと画像が滲むみたいな話は聞いたことがあります。何かこの辺に鍵があるんでしょうか……
アバター
くろうど
記事: 318
登録日時: 2016年1月22日(金) 20:52
お住まい: 東京都
連絡する:

Re: scaleからの拡大でゴミが出る問題

投稿記事 by くろうど »

デフォルトプロジェクトで……という話だったので、うすうす関係ないんじゃないかと思ってました、すみません。

その後の調査で、最初の縦横2倍ずつにするコードに対しては、以下の箇所を変更する事でゴミ(横線)が消える事は確認しました。
値は仮で2および4としました。

このコードがある箇所は rmmz_core.js ですが、(お分かりかと思いますが)直接変更しないで、プラグイン化して書き換えてください。

尚、私は技術的な理屈は分かっていません。
Window.png から余分に切り取ってると判断して座標をずらしてみました。

コード: 全て選択

Window.prototype._refreshPauseSign = function() {
	const sx = 144;
	const sy = 96 + 2; // Y座標を下に動かす
	const p = 24;
	this._pauseSignSprite.bitmap = this._windowskin;
	this._pauseSignSprite.anchor.x = 0.5;
	this._pauseSignSprite.anchor.y = 1;
	this._pauseSignSprite.move(this._width / 2, this._height);
	this._pauseSignSprite.setFrame(sx, sy, p, p - 4); // 高さから2倍した値を引く
	this._pauseSignSprite.alpha = 0;
};

Window.prototype._updatePauseSign = function() {
	const sprite = this._pauseSignSprite;
	const x = Math.floor(this._animationCount / 16) % 2;
	const y = Math.floor(this._animationCount / 16 / 2) % 2;
	const sx = 144;
	const sy = 96 + 2; // Y座標を下に動かす
	const p = 24;
	if (!this.pause) {
		sprite.alpha = 0;
	} else if (sprite.alpha < 1) {
		sprite.alpha = Math.min(sprite.alpha + 0.1, 1);
	}
	sprite.setFrame(sx + x * p, sy + y * p, p, p - 4); // 高さから2倍した値を引く
	sprite.visible = this.isOpen();
};
よろしくお願いします。
▼だいたいTwitterにいます。たぶん。
https://twitter.com/kuroudo119
アバター
Plasma Dark
記事: 731
登録日時: 2020年2月08日(土) 02:29
連絡する:

Re: scaleからの拡大でゴミが出る問題

投稿記事 by Plasma Dark »

フォーラムのスレッドで同様の問題について話したことがあります。
MZでは Bitmap クラスにおいて、ロード直後の smooth が true に固定されており、pixi.jsのスケールモード設定が線形になっています。

https://forum.tkool.jp/index.php?thread ... 1%84.4504/

今回のケースでは、システム画像について、スケールモードを最近傍になるよう設定してあげれば良いんじゃないでしょうか。
(トリアコンタンさんの画像ぼかし個別設定プラグインが同じことをしていますので、下記コードは参考までに)

コード: 全て選択

(() => {
  'use strict';
  const _ImageManager_loadSystem = ImageManager.loadSystem;
  ImageManager.loadSystem = function(filename) {
      const bitmap = _ImageManager_loadSystem.call(this, filename);
      bitmap.smooth = false;
      return bitmap;
  };
})();
※ひどいミスがあったので修正しました。
最後に編集したユーザー Plasma Dark [ 2021年3月11日(木) 01:51 ], 累計 2 回
アバター
トリアコンタン
記事: 2311
登録日時: 2015年11月10日(火) 21:13
お住まい: きのこ王国
連絡する:

Re: scaleからの拡大でゴミが出る問題

投稿記事 by トリアコンタン »

こんにちは!

以前に公開した以下のプラグインで画像種別ごとにスケールモードを設定できます。
ただし、ドットが目立つようになってしまうので、使えるかどうかはケースバイケースとなります。

「画像ぼかし個別設定プラグイン」
https://raw.githubusercontent.com/triac ... Setting.js
プラグイン関連のトラブルが発生した際の切り分けと報告の方法です。
http://qiita.com/triacontane/items/2e227e5b5ce9503a2c30

[Blog] : http://triacontane.blogspot.jp/
[Twitter]: https://twitter.com/triacontane/
[GitHub] : https://github.com/triacontane/
colombo
記事: 19
登録日時: 2018年7月24日(火) 07:01

Re: scaleからの拡大でゴミが出る問題

投稿記事 by colombo »

くろうど様、わざわざ検証していただいてありがとうございます!
ご教示くださったコードを導入すると横線は消えました!
これは画面に描画するポーズサインの範囲を変えたって感じですかね。


Plasma Dark様、ご回答ありがとうございます!
フォーラムでのやり取りとても興味深いもので勉強になりました。
スレッドを読んである程度理解できたのでいいかなとも思ったのですが、そのまま放っておくのもあれですし一応お知らせしておきます。

参考にとご教示くださったコードを導入すると下記のエラーが出ました。
これはウィンドウスキンの画像は別物みたいなことですかね?
TypeError
this._windowskin.addLoadListener is not a function

rmmz_managers.js:2030 TypeError: this._windowskin.addLoadListener is not a function
at Window_TitleCommand.set (rmmz_core.js:3507)
at Window_TitleCommand.Window_Base.loadWindowskin (rmmz_windows.js:69)
at Window_TitleCommand.Window_Base.initialize (rmmz_windows.js:19)
at Window_TitleCommand.Window_Scrollable.initialize (rmmz_windows.js:594)
at Window_TitleCommand.Window_Selectable.initialize (rmmz_windows.js:840)
at Window_TitleCommand.Window_Command.initialize (rmmz_windows.js:1451)
at Window_TitleCommand.initialize (rmmz_windows.js:6368)
at new Window_TitleCommand (rmmz_windows.js:6361)
at Scene_Title.createCommandWindow (rmmz_scenes.js:477)
at Scene_Title.create (rmmz_scenes.js:400)

トリアコンタン様、ご回答ありがとうございます!
制作してくださったプラグインを導入してシステムの値をfalseにしてみたところ綺麗にゴミは消えました!


お三方とも本当に助かりました!
ひとりでは絶対に解決できなかった問題だったと思います。
いろいろ勉強にもなりました。
親切に教えてくださってありがとうございました!
アバター
Plasma Dark
記事: 731
登録日時: 2020年2月08日(土) 02:29
連絡する:

Re: 【解決済み】scaleからの拡大でゴミが出る問題

投稿記事 by Plasma Dark »

参考にとご教示くださったコードを導入すると下記のエラーが出ました。
だいぶ寝ぼけたコードになっていたようで、大変失礼しました。
修正後のコードであれば問題なく動くはずです。

繰り返しになりますが、トリアコンタンさんのプラグインとやっていることは同じですので、プラグインとして形の整ったそちらのほうが使いやすいです。
colombo
記事: 19
登録日時: 2018年7月24日(火) 07:01

Re: 【解決済み】scaleからの拡大でゴミが出る問題

投稿記事 by colombo »

Plasma Dark様、わざわざ修正してくださってありがとうございます!
本当に助かりました :D
返信する

“MZ:質問”に戻る