rendered paste body=beginRPGツクールXP の Bitmap に文字描画のアンチエイリアスをON/OFFする機能を加えます。また、2kのように描画にビットマップを使ったりグラデーションをかけたりもできます。ただし非常に重くなるので注意してください。例:すべてのビットマップのアンチエイリアスを無効にし、グラデーションを有効にします。(ただし、すでに生成済みのビットマップに関しては設定を変更しません。)Bitmap.default_aa = falseBitmap.default_text_type = 128 # 数は濃度を表すテキスト描画用画像 draw_bitmap を用いて、bitmap に文字を描画します。bitmap.aa = falsebitmap.text_type = draw_bitmapbitmap.draw_text(x, y, w, h, str)=endclass Bitmap # アンチエイリアスのデフォルト値 @default_aa = true # テキスト描画形式のデフォルト値 # nil : 単純な色による描画 # 数 : 数を基本のアルファ値(濃度)としたグラデーション # Bitmap オブジェクト : ビットマップ描画(描画色は無視) @default_text_type = nil # 一時描画用のバッファ @@temp_buffer = new(640, 480) # 多重エイリアス防止 unless Bitmap.respond_to?(:default_aa) class << self #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_accessor :default_aa # アンチエイリアスのデフォルト値 attr_accessor :default_text_type # テキスト描画形式のデフォルト値(前述) end #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_accessor :aa # アンチエイリアスの有無 attr_accessor :text_type # テキスト描画形式 #-------------------------------------------------------------------------- # ● オブジェクト初期化 # 引数についてはヘルプ参照 #-------------------------------------------------------------------------- alias _initialize initialize # 元の処理の保存 def initialize(*args) _initialize(*args) # アンチエイリアスの有無をデフォルト値に設定 @aa = Bitmap.default_aa # テキスト描画形式をデフォルト値に設定 @text_type = Bitmap.default_text_type end #-------------------------------------------------------------------------- # ● 文字列の描画 # 引数についてはヘルプ参照 #-------------------------------------------------------------------------- alias draw_text_noaa draw_text # 元の処理の保存 def draw_text(*args) # 簡単のため引数の形をそろえる if args[0].is_a?(Rect) rect = args[0] args[0,1] = [rect.x, rect.y, rect.width, rect.height] end # 引数チェックを RGSS 側にさせるため、再度メソッド呼び出しをする # チェックの必要がなければここに draw_text_check_aa の処理を書いてもよい draw_text_check_aa(*args) end #-------------------------------------------------------------------------- # ● アンチエイリアスの有無を考慮した文字列の描画 # 引数についてはヘルプの draw_text の項目を参照 #-------------------------------------------------------------------------- def draw_text_check_aa(x, y, w, h, str, align = 0) # アンチエイリアスありの場合 if @aa # 元の処理の呼び出し draw_text_aa(x, y, w, h, str, align) # アンチエイリアスなしの場合 else # 一時描画用バッファ temp = @@temp_buffer # バッファのクリア temp.clear # バッファに文字列描画 temp.font = font temp.draw_text_noaa(0, 0, w, h, str, align) # すべてのピクセルについてチェック w.times do |px| h.times do |py| # ピクセルの取得 color = temp.get_pixel(px, py) # ピクセルの描画が一定値(ここでは127)より濃かった場合 if color.alpha > 127 # テキスト描画形式で分岐 case @text_type # ビットマップによる描画 when Bitmap # 描画用ビットマップから取得したピクセル色を使う color = @text_type.get_pixel(px, py) when Numeric # ピクセルの位置で濃度を調節 color.alpha = (255.0 - @text_type) * py / h + @text_type # 単純な色による描画 when nil # 色を濃くする color.alpha = 255 else raise "テキスト描画形式が不正です" end # ピクセルの描画が一定値より薄かった場合 else # 色を無色にする color.alpha = 0 end # ピクセルをおく temp.set_pixel(px, py, color) end end # 出来上がったバッファから転送 blt(x, y, temp, Rect.new(0, 0, w, h)) end end endend# 使用例:# グラデーションのかかったアンチエイリアス処理無しの文字になります。# 必要ない場合、この部分は変更または削除してください。Bitmap.default_aa = falseBitmap.default_text_type = 96