LNS030 Bitmap文字描画

Bitmap クラスに高速な文字描画メソッドを追加します。






基本情報

前提スクリプト


拡張タイプ

△ 開発用 (導入するだけでは特に変化しない)


説明

概要

キャッシュを用いた高速な文字描画メソッドを追加します。
旧版 LNS000 追加機能 に含まれていた文字描画に関するメソッドを分離したものです。

メソッド

● Bitmap#draw_number(x, y, width, height, value[, fmt])

● Bitmap#draw_number(rect, value[, fmt])

指定位置に数値 value を描画します。キャッシュを利用した高速な描画メソッドです。
  • x, y, width, height / rect
    • 描画位置を指定します。
    • 矩形の設定は基本的に draw_text と同様で、描画に必要な幅が指定幅よりも大きい場合、はみ出るぶんは描画されません。
    • width の値には fmt の指定によって「桁数」を指定することもできます。
  • value
    • 描画する内容を数値(Numeric)または文字列(String)で渡します。
    • 用途上は数値(0-9)が渡されることを想定していますが、文字列を渡しても正常に動作します。
    • 数値(Numeric)を渡した場合、fmt を省略すると "d" として扱われます。
  • fmt
    • 描画フォーマットを指定します。以下のオプションを「文字列で」指定します。
    • アライン指定
      • 0 : 左詰めで描画します。省略した場合も左詰めになります。
      • 1 : 指定範囲の中央に描画します。高さ方向は常に中央揃えです。
      • 2 : 右詰めで描画します。
    • アライン指定は fmt の最初に置く必要があります。
    • 桁数指定
      • d : width の値を「桁数指定」と解釈するようになります。例えば width = 3 で fmt = "2d" の場合、「右詰めで最大3桁描画」という意味になります。
      • 全角文字は2桁として扱われます。
    • 幅制限無視
      • w : 描画に必要な幅が指定幅を超えても全てを描画します。
    • 桁区切り
      • (任意の記号) : 直後の値に応じた桁数ごとに、指定の記号が入ります。
      • ",3" の場合、「下から3桁ごとに","が挿入される」という意味になります。
      • 数値を省略した場合は 3桁ごとに挿入されます。

fmt 指定例

draw_number(x, y, 48, h, value, "2")
  • 右詰めで描画されます。
  • value の描画に必要な幅が 48 を超える場合、超えたぶんは描画されません。

draw_number(x, y, 3, h, value, "2d")
  • 右詰めで描画されます。
  • 最大で 3 桁分のスペースが確保されますが、value が 3 桁(3 文字)を超える場合、超えたぶんは描画されません。

draw_number(x, y, 3, h, value, "2dw")
  • 右詰めで描画されます。
  • 3 桁分のスペースが確保されますが、value が 3 桁を超える場合、超えたぶんは更に左側にはみ出して描画されます。

draw_number(x, y, w, h, value, "_3")
  • 3 桁ごとに "_" が桁区切りとして挿入されます。

draw_number(x, y, w, h, value, "2,4")
  • 右詰めで描画されます。
  • 4 桁ごとに "," が桁区切りとして挿入されます。

draw_number(x, y, 10, h, value, "d2,3")
  • 最大で 10 桁ぶんのスペースが確保されます。区切り文字も桁数に含みます。
  • 3 桁ごとに "," が桁区切りとして挿入されます。
  • 「2」は文字列の最初にないため、解釈されません(右詰めになりません)。

● Bitmap#draw_number_simple(x, y, value)

draw_number からレイアウトに関する処理を全て除いた高速な描画メソッドです。
  • draw_number よりも2倍程度高速です。毎フレーム書き換え続ける必要がある数値を描画する場合などはこちらをご利用ください。

● Bitmap#draw_text_ex(rect, text)

Window_Base にある同名のメソッドの部分的移植です。制御文字(\N[1]など)の解釈を一切行いません。

● Minimum_Symbol.get(str)

1 文字あたり 5*7 ピクセルの極小フォントによって str を描画したビットマップを返します。
  • RGSS の文字描画機能では font.size が 12 以下の場合ぼやけて見づらくなるので、小さい数値を表記するときの代替手段として用意されています。
  • 1 文字の幅は 5 ピクセルですが、そのうち 1 ピクセルは重ねて描画されます。
    • すなわち、文字数 X の文字列を描画するとき、ビットマップの幅は X * 4 + 1 となります。

  • str の内容として使える文字は以下のいずれかに限ります。
0 1 2 3 4 5 6 7 8 9 ( ) . , + - * / ^ = ! ? _ :
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
(アルファベットは小文字も大文字も同じ形になる)
  • 上記以外の文字を含む場合、その部分は空白になります。


備考

再定義されるメソッド

なし

設定項目

なし


更新履歴

  • 2020/12/28 公開

  • こんにちは。不具合を発見したのでご報告いたします。 LNS000 組み込み拡張 LNS010 Input拡張 LNS100 プリセット拡張 LNS102 マウス操作 LNS140 マップ/キャラ拡張 の5つを導入した状態で、マップ画面でマウスカーソルをゲームウインドウの外側で大きく動かすなどすると、「 スクリプト 'LNS 140 マップ/キャラ拡張' の 980 行目で IndexError が発生しました。 index -1 too small for array; minimum: 0 」というエラーメッセージが表示され、ゲームが終了してしまいます。 スクリプトは全て最新で、内容は改変していません。 -- 2022-07-26 01:29:40
  • 確認が遅れましたが、対応修正しました。正確には「既に対応済みであったがアップロードを忘れていた」という状態でした…… -- 2022-11-01 15:39:07
  • 対応ありがとうございます!しかし LNS000, 010, 100, 102, 140 の5つを入れた状態で起動直後に「スクリプト 'LNS140 マップ/キャラ拡張' の 1719 行目で NameError が発生しました。 undefined method 'lns102_dash?' for class 'Game_Player'」と表示され、終了します。 -- 2022-12-24 16:39:35
コメント:

すべてのコメントを見る
最終更新:2020年12月28日 22:46