LNS020 Window_Base拡張

Window_Baseクラスにいろいろな機能を追加します。





基本情報

前提スクリプト


挿入位置



説明

概要

 Window_Base に以下の機能を追加します。これらは全て標準の機能の置き換えとなるため、利用時には特に意識する必要がありません(導入するだけで機能します)。
多くの機能はエイリアスで実現されますが、元の機能を大幅に変更するものもありますので、他のスクリプト素材で再定義を行っている場合には不具合の原因にもなりますのでよくご確認ください。

◆テキストキャッシュ

  • ウィンドウ内容を表示する際、頻出する文字列(アイテム名や数字など)をキャッシュを用いて描画することで、動作を高速化します。
  • 処理内容が複雑になるため、初回の描画は通常よりも遅くなります。

◆強制改行

  • 特殊な文字列の描画(draw_text_ex)の際、描画する x座標 が指定された幅を超えた場合に、強制的に改行処理を挟みます。
  • 指定幅を特に指定しなかった場合、コンテンツの幅になります。

◆なめらかウィンドウ

  • いくつかのプロパティにターゲット値が設定できるようになります。ターゲット値が実際のプロパティと異なる場合、ターゲット値との差が徐々に少なくなるようにウィンドウを移動します。
  • ターゲット値が設定出来るのは x, y, ox, oy, width, height, opacity, contents_opacity, back_opacity です。
  • ターゲット値の名前はこれらの名前の先頭に t を付加したものです。たとえば window.x のターゲット値は window.tx で参照、window.tx = 100 で変更できます。
  • ターゲットの元プロパティを変更した場合、ターゲット値はそれに合わせて変更されます。
  • Window_Base のクラス変数 @@smooth_move を変更することで、なめらかモードの有効/無効を切り替えられます。LNS022a 拡張オプションを導入するとゲーム中に変更できるようになります。
  • ターゲットへの追従速度は 定数 Move_Speed によって定義されます。1のとき最速、数値が大きくなるほどゆっくりとした追従となります。

◆カーソル矩形の修正

  • RGSS3 では、カーソル矩形もウィンドウの転送元座標の影響を受けるようになりましたが、カーソル座標が転送元座標よりも小さいとき、何故か本来表示されるべき座標が絶対値化される仕様(バグ?)になっています。
例:カーソルY座標 32, oy 64 のとき、カーソルは相対値 -32 の位置にあるべきだが、RGSS3 では 32 になる。
  • なめらかウィンドウ適用時、カーソルが一時的にウィンドウの表示領域をはみ出る場合があり、この仕様の存在によってカーソル移動が不自然になります。
  • このスクリプトでは応急措置的に、カーソルが表示されるべき相対位置がマイナスの値になったとき、そのぶんカーソルの幅や高さを減らすことで対応しています。

◆スクロールバー

  • Window_Selectable などのウィンドウ内容をスクロール可能なウィンドウで、コンテンツの幅や高さがそのウィンドウよりも大きい場合、右辺と下辺に必要に応じてスクロールバーを表示します。
  • スクロールバーは、ウィンドウ内容をスクロールした時、アクティブ化した時、開いた時、可視化した時のいずれかのタイミングで表示されます。
  • スクロールバーは表示されてから一定時間経つと非表示になります。
  • 現在の仕様ではスクロールバーを直接操作してスクロールさせることはできません。


備考

再定義されるメソッド

  • Window_Base#process_character
case 分岐内に強制改行の処理を挟むために、まるごと再定義されています。

  • Window_Base#draw_face
描画後にフェイスグラフィックの転送元ビットマップを解放しないように変更します。(なぜ解放してたんだ?)

  • Window_Base#draw_item_name
  • Window_Base#draw_actor_level
  • Window_Base#draw_current_and_max_values
  • Window_Base#draw_actor_tp
  • Window_Base#draw_actor_param
  • Window_Base#draw_currency_value
  • Window_EqueipStatus#draw_current_param
  • Window_EqueipStatus#draw_right_arrow
  • Window_EqueipStatus#draw_new_param
  • Window_ShopNumber#draw_number
Bitmap#draw_number(LNS000 追加機能)によるキャッシュを利用した描画メソッドに変更します。

  • Window_Selectable#ensure_curor_visible
  • Window_Selectable#top_row=
もともと self.oy を参照/変更していたものを、self.toy を参照/変更するよう変更します。

  • Window_NameInput#update_cursor
  • Window_ShopNumber#update_cursor
カーソル矩形の設定方法を変更します(実際に表示されるカーソルは変わりません)。

  • Window_ItemList#draw_item_number
アイテムのメモに「個数非表示」と書かれていないときだけ個数を描画するように変更します。

上記のメソッドを拡張するスクリプトはこれよりも後ろに入れてください。

設定項目

Bar_Color1<初期値:RGB(224, 224, 255, 128)>
スクロールバー枠の色です。
Bar_Color2<初期値:RGB(160, 0, 0, 224)>
スクロールバー中身の色です。
DefaultItemWidth<初期値:224>
アイコン付きアイテム名の標準描画幅です。ウィンドウサイズを変更する場合、例えば幅640にするなら288にするとちょうどよくなります。
Move_Speed<初期値:6>
[なめらかウィンドウ]有効時の、ウィンドウ位置の追従速度です。小さいほど速くなります。


  • こんにちは。この度こちらの大変魅力的な素材を目にしましたので早速導入させていただきました。 -- 2018-09-11 04:28:38
  • 不具合報告となるのですが、導入いたしますとゲーム中アクターのステータスが表示された際に最大HPと最大MPが真ん中寄り(現在値寄り)の表示となってしまいます。単体導入でも発生しておりますので、競合ではないと考えられます。改善が可能であればお手数をおかけしますがよろしくお願いいたします。 -- 2018-09-11 04:33:17
  • (管理人)返信が大幅に遅れて大変申し訳ありません。ステータス数値が中央寄りで描画される変化は仕様となります(自分で使うときに変更していたのを忘れていました)。修正したい場合、当スクリプトの1029行目("draw_current_and_max_values"メソッド内)にあります「max = "%-#{digits}d" % max」という記述を「max = "%#{digits}d" % max」に変更していただけると、プリセットと同じ右よりで描画されます。 -- 2018-11-23 15:23:34
コメント:

すべてのコメントを見る
最終更新:2019年04月07日 13:46