【解決済】ゲーム内でメッセージウィンドウの透過度を変更するには(VXACE)

masa13
記事: 14
登録日時: 2021年2月28日(日) 20:20

【解決済】ゲーム内でメッセージウィンドウの透過度を変更するには(VXACE)

投稿記事by masa13 » 2022年6月28日(火) 20:16

お世話になっています。
タイトルのようにゲーム内でスクリプトコマンドによって
メッセージウィンドウの透過具合を変えたいのですが可能でしょうか。
できれば枠ではなく背景部分を行いたいと思っています。
VXではできる方法があったのですが同じ方法では無理でした。
よろしくおねがいします。
最後に編集したユーザー masa13 on 2022年7月02日(土) 14:18 [ 編集 1 回目 ]

名無し蛙
記事: 302
登録日時: 2015年11月23日(月) 02:46

Re: ゲーム内でメッセージウィンドウの透過度を変更するには(VXACE)

投稿記事by 名無し蛙 » 2022年7月02日(土) 03:34

VXAceではできない、というか多分VXでも出来ないと思うんですけど
どんなコードを書いていたのか気になりますね。
back_opacityを下げればウィンドウ背景透過出来るでしょうけど
スクリプトコマンド内からmessage_windowにアクセスする手段が無いです。

強引な方法でアクセス権限を上書きする事も出来ますけども

コード: 全て選択

module MessageWindowExtend
  attr_reader :message_window
end
SceneManager.scene.extend(MessageWindowExtend)
SceneManager.scene.message_window.back_opacity = 32

設計的にはWindow_Messageの制御文字に追加するのが正着手だと思いますねぇ。
\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
masa13
記事: 14
登録日時: 2021年2月28日(日) 20:20

Re: ゲーム内でメッセージウィンドウの透過度を変更するには(VXACE)

投稿記事by masa13 » 2022年7月02日(土) 14:12

ありがとうございます。
どちらもちゃんと使えました。

自分が見たのはメッセージウィンドウではなかったり
勘違いしていた可能性が高いですね。
ちなみにwindow_opacity = 128 みたいなコードでした。

やり方を知らないだけで知ってる人は普通にできることなのかと思ってましたが
本来はそうではないことだったんですね。
本当に助かりました。
masa13
記事: 14
登録日時: 2021年2月28日(日) 20:20

Re: ゲーム内でメッセージウィンドウの透過度を変更するには(VXACE)

投稿記事by masa13 » 2022年7月02日(土) 14:17

これは興味本位で試したので面倒な内容であれば無視してもらっていいのですが
>message_window.back_opacity = 32
の部分を
>message_window.opacity = 32
にしても枠のほうは変わらなかったのですが枠ごと変えるには別のコードもしくはできないのでしょうか
名無し蛙
記事: 302
登録日時: 2015年11月23日(月) 02:46

Re: 【解決済】ゲーム内でメッセージウィンドウの透過度を変更するには(VXACE)

投稿記事by 名無し蛙 » 2022年7月02日(土) 16:04

制御文字の方を改変すれば反映されると思います。
Window_Messageの194行目、及び175行目を読めば分かりますが
メッセージ処理の開始時にopacityが0or255に設定されます。
なのでメッセージ処理の直前にopacityの変更を行っても無意味です。

“VX / Ace:質問” へ戻る