お世話になっています。
タイトルのようにゲーム内でスクリプトコマンドによって
メッセージウィンドウの透過具合を変えたいのですが可能でしょうか。
できれば枠ではなく背景部分を行いたいと思っています。
VXではできる方法があったのですが同じ方法では無理でした。
よろしくおねがいします。
【解決済】ゲーム内でメッセージウィンドウの透過度を変更するには(VXACE)
【解決済】ゲーム内でメッセージウィンドウの透過度を変更するには(VXACE)
最後に編集したユーザー masa13 [ 2022年7月02日(土) 14:18 ], 累計 1 回
Re: ゲーム内でメッセージウィンドウの透過度を変更するには(VXACE)
VXAceではできない、というか多分VXでも出来ないと思うんですけど
どんなコードを書いていたのか気になりますね。
back_opacityを下げればウィンドウ背景透過出来るでしょうけど
スクリプトコマンド内からmessage_windowにアクセスする手段が無いです。
強引な方法でアクセス権限を上書きする事も出来ますけども
設計的にはWindow_Messageの制御文字に追加するのが正着手だと思いますねぇ。
\B[32]と書く事でウィンドウ背景の不透明度を32に変更します。(デフォルトで192)
どんなコードを書いていたのか気になりますね。
back_opacityを下げればウィンドウ背景透過出来るでしょうけど
スクリプトコマンド内からmessage_windowにアクセスする手段が無いです。
強引な方法でアクセス権限を上書きする事も出来ますけども
コード: 全て選択
module MessageWindowExtend
attr_reader :message_window
end
SceneManager.scene.extend(MessageWindowExtend)
SceneManager.scene.message_window.back_opacity = 32
\B[32]と書く事でウィンドウ背景の不透明度を32に変更します。(デフォルトで192)
コード: 全て選択
class Window_Message < Window_Base
#--------------------------------------------------------------------------
# ○ 制御文字の処理
# code : 制御文字の本体部分(「\C[1]」なら「C」)
#--------------------------------------------------------------------------
alias :_old_process_escape_character :process_escape_character
def process_escape_character(code, text, pos)
case code.upcase
when 'B'
self.back_opacity = obtain_escape_param(text)
else
_old_process_escape_character(code, text, pos)
end
end
#--------------------------------------------------------------------------
# ○ 改ページ処理
#--------------------------------------------------------------------------
alias :_old_new_page :new_page
def new_page(text, pos)
self.back_opacity = 192
_old_new_page(text, pos)
end
end
Re: ゲーム内でメッセージウィンドウの透過度を変更するには(VXACE)
ありがとうございます。
どちらもちゃんと使えました。
自分が見たのはメッセージウィンドウではなかったり
勘違いしていた可能性が高いですね。
ちなみにwindow_opacity = 128 みたいなコードでした。
やり方を知らないだけで知ってる人は普通にできることなのかと思ってましたが
本来はそうではないことだったんですね。
本当に助かりました。
どちらもちゃんと使えました。
自分が見たのはメッセージウィンドウではなかったり
勘違いしていた可能性が高いですね。
ちなみにwindow_opacity = 128 みたいなコードでした。
やり方を知らないだけで知ってる人は普通にできることなのかと思ってましたが
本来はそうではないことだったんですね。
本当に助かりました。
Re: ゲーム内でメッセージウィンドウの透過度を変更するには(VXACE)
これは興味本位で試したので面倒な内容であれば無視してもらっていいのですが
>message_window.back_opacity = 32
の部分を
>message_window.opacity = 32
にしても枠のほうは変わらなかったのですが枠ごと変えるには別のコードもしくはできないのでしょうか
>message_window.back_opacity = 32
の部分を
>message_window.opacity = 32
にしても枠のほうは変わらなかったのですが枠ごと変えるには別のコードもしくはできないのでしょうか
Re: 【解決済】ゲーム内でメッセージウィンドウの透過度を変更するには(VXACE)
制御文字の方を改変すれば反映されると思います。
Window_Messageの194行目、及び175行目を読めば分かりますが
メッセージ処理の開始時にopacityが0or255に設定されます。
なのでメッセージ処理の直前にopacityの変更を行っても無意味です。
Window_Messageの194行目、及び175行目を読めば分かりますが
メッセージ処理の開始時にopacityが0or255に設定されます。
なのでメッセージ処理の直前にopacityの変更を行っても無意味です。