第13回 ウィンドウ枠上に文字

 2008-08-30
ウィンドウに文字を描画する際、16px の余白があり
この部分には、文字を描画できません。

今回は、その余白部分に文字を表示したいと思います。

SS200808302358.jpg


ではでは、クラスを定義してみます。
class Foo < Window_Base
  # 初期化
  def initialize(x, y, w, h)
    super(x, y, w, h)
    create_sprite_window(w, h)
  end
  # スプライト生成
  def create_sprite_window(w, h)
    @sp_win = Sprite.new
    @sp_win.bitmap = Bitmap.new(w, h)
    @sp_win.x = x
    @sp_win.y = y
    # ウィンドウより上に表示
    @sp_win.z = self.z + 1
  end
end
こんな感じでしょうか?
難しいことは一切していません。
ウィンドウと同じ大きさのスプライトを生成して
上に重ねただけです。
これで、ウィンドウの枠を無視して
文字を描画することが出来ます。

んで、描画するには他にメソッドを定義します。
先ほどのクラスの中に定義してください。
# スプライトに描画
def draw_sprite(x, y, w, h, t, a = 0)
  @sp_win.bitmap.draw_text(x, y, w, h, t, a)
end
# スプライトをクリア
def clear_sprite(*rect)
  # 配列の要素がないなら
  if rect.empty?
    @sp_win.bitmap.clear
  # 1つ目の要素が Rect クラスなら
  elsif rect[0].class == Rect
    @sp_win.bitmap.clear_rect(rect[0])
  # 上記以外なら
  else
    @sp_win.bitmap.clear_rect(rect[0], rect[1], rect[2], rect[3])
  end
end
ちょっと、クリアの処理に凝っちゃった

おっと、忘れるとこだった。
スプライトを使用した後は、必ず解放してあげないといけないよ
def dispose
  @sp_win.dispose
  super
end
解放しないとどういうことになるか知りたい人は、
このメソッドを定義せずに実行してみると良いよ。

では、イベントで確認します。
win = Foo.new(61, 54, 150, 100)
win.draw_sprite(0, 0, 150, 24, "TestMessage.")
Graphics.wait(60)
win.clear_sprite(0, 0, 150, 12)
Graphics.wait(60)
win.dispose


◆ 今回のポイント
・ Sprite を使用した後は、解放する。

コメント




 

 ※ コメント内にURLを含めるには、バッククォート(`)をURLの直前に付け加えてください。


管理人のみ閲覧許可 [?]

トラックバック
トラックバックURL:
http://cacaosoft.blog42.fc2.com/tb.php/92-a109e0f2
≪ トップページへこのページの先頭へ  ≫
カレンダー
01 << 2017/02 >> 03
- - - 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 - - - -

カテゴリー
最近の記事
02/14 お返事
01/21 お返事
01/12 更新情報
11/28 お返事
08/08 お返事

最近のコメント
01/21 お返事
11/30 z座標
11/20 z座標
08/03 お返事
02/24 お返事

タグクラウド

リンク