ページ 1 / 1
【解決済み】scaleからの拡大でゴミが出る問題
Posted: 2021年3月10日(水) 05:29
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);
};
上記のようなコードを書いてポーズサインを拡大させるとスクショのようにゴミが表れる症状に悩んでいます。
等倍のときは問題ないのですが、少しでもscaleで拡大させるとゴミが出ます(ここではわかりやすく4倍にしています)
※ウィンドウスキンはデフォルトのものを使用しています。他プラグインは使用していません。
MVのときは同様のやり方で特に問題は出なかったのですが……
原因や解決方のわかる方がいらっしゃいましたら、どうかご教示くださいませ。
Re: scaleからの拡大でゴミが出る問題
Posted: 2021年3月10日(水) 08:48
by くろうど
こんにちは。
私の方ではポーズサインの拡大はしていないのですが、ポーズサインにゴミ(横線)が出る事象は発生し、解決したので、同じ方法で解決するかは分かりませんが、お知らせします。
■私の事象
行数を3行にしたかったので、メッセージWindowの高さを変えた。
すると、ポーズサインの矢印上部にゴミ(横線)が出た。
■対処方法
Windowの高さを偶数にした。
(wh を + 1 した)
■メモ
原因や理由は謎ですが、RPGツクールMZで、Windowの高さを奇数にしたり小数にしたりすると、時々ゴミ(横線)が出るようです。
ご確認ください。
Re: scaleからの拡大でゴミが出る問題
Posted: 2021年3月10日(水) 10:02
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の高さを奇数にしたり小数にしたりすると、時々ゴミ(横線)が出るようです。
自分も偶数じゃないと画像が滲むみたいな話は聞いたことがあります。何かこの辺に鍵があるんでしょうか……
Re: scaleからの拡大でゴミが出る問題
Posted: 2021年3月10日(水) 11:36
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();
};
よろしくお願いします。
Re: scaleからの拡大でゴミが出る問題
Posted: 2021年3月10日(水) 12:10
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;
};
})();
※ひどいミスがあったので修正しました。
Re: scaleからの拡大でゴミが出る問題
Posted: 2021年3月10日(水) 12:19
by トリアコンタン
こんにちは!
以前に公開した以下のプラグインで画像種別ごとにスケールモードを設定できます。
ただし、ドットが目立つようになってしまうので、使えるかどうかはケースバイケースとなります。
「画像ぼかし個別設定プラグイン」
https://raw.githubusercontent.com/triac ... Setting.js
Re: scaleからの拡大でゴミが出る問題
Posted: 2021年3月11日(木) 01:22
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にしてみたところ綺麗にゴミは消えました!
お三方とも本当に助かりました!
ひとりでは絶対に解決できなかった問題だったと思います。
いろいろ勉強にもなりました。
親切に教えてくださってありがとうございました!
Re: 【解決済み】scaleからの拡大でゴミが出る問題
Posted: 2021年3月11日(木) 01:55
by Plasma Dark
参考にとご教示くださったコードを導入すると下記のエラーが出ました。
だいぶ寝ぼけたコードになっていたようで、大変失礼しました。
修正後のコードであれば問題なく動くはずです。
繰り返しになりますが、トリアコンタンさんのプラグインとやっていることは同じですので、プラグインとして形の整ったそちらのほうが使いやすいです。
Re: 【解決済み】scaleからの拡大でゴミが出る問題
Posted: 2021年3月11日(木) 03:13
by colombo
Plasma Dark様、わざわざ修正してくださってありがとうございます!
本当に助かりました
