第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
≪ トップページへこのページの先頭へ  ≫
カレンダー
05 << 2017/06 >> 07
- - - - 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 29 30 -

カテゴリー
最近の記事
最近のコメント
03/16 お返事
01/21 お返事
11/30 z座標
11/20 z座標
08/03 お返事

タグクラウド

リンク