スポンサーサイト

 --------
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
カテゴリ :スポンサー広告 トラックバック(-) コメント(-)

第14回 コマンドウィンドウにアイコン

 2008-08-31
今回は、コマンドウィンドウにアイコンを描画する方法を紹介します。

SS200808304132.jpg

※ 9月2日 サンプルスクリプトを修正


class Bar < Window_Command
  # 初期化
  def initialize(x, y, w, command)
    super(w, command)
    self.x = x
    self.y = y
  end
#~ class Window_Command < Window_Selectable  # 再定義用(上記は削除)
  # 項目の描画
  def draw_item(index, enabled = true)
    rect = item_rect(index)
    rect.x += 4
    rect.width -= 8
    self.contents.clear_rect(rect)
    self.contents.font.color = normal_color
    self.contents.font.color.alpha = enabled ? 255 : 128
    # 描画する項目の先頭に"<番号>"が含まれているなら
    if /^<(\d+)>/ =~ @commands[index]
      # 項目の左にアイコンを追加
      draw_icon($1.to_i, rect.x, rect.y, enabled)
      # アイコン分ずらす
      rect.x += 26
      rect.width -= 26
      # 項目を描画
      self.contents.draw_text(rect, $')
    else  # 含まれていないなら
      # そのまま描画
      self.contents.draw_text(rect, commands[index])
    end
  end
end
後半、知らない処理なんかが出てきたでしょうか?
では、行ごとに説明していきます。
if /^<(\d+)>/ =~ @commands[index]
この行からを説明したいと思います。
これは、正規表現という処理を行っています。
詳しくは、ヘルプを参照していただきたいと思います。
簡単に説明すると、左の/.../の部分が正規表現です。
右側の文に左側の文字(条件付)が含まれているかを判別しています。

で、今回の文字は"先頭から<1つ以上の数字>"という条件で検索しています。

つまり、"<12>あいうえお"などの文字であるかを判別しています。

draw_icon($1.to_i, rect.x, rect.y, enabled)
このメソッドは、Window_Base に定義されているものです。
アイコンを描画します。
$1.to_i というのは、先ほどの正規表現でマッチした数字が格納されています。
しかし、文字列なので to_i メソッドで数字に変換しています。

ここで指定された番号は、アイコンセットの並びの番号です。
0から開始され横に16個並んでいます。

self.contents.draw_text(rect, $')
この行では、項目を描画しています。
$' には、マッチした文字列の後ろの文字列が格納されています。


では、イベントコマンドで次のスクリプトを実行してみてください。
cmd = %w[<1>Message1 <8>Message2 <22>Message3]
Bar.new(147, 100, 150, cmd)
スクリプトの都合上、表示されるだけです・・・。

下の画像のようにデータベースを変更すれば、タイトル画面でチェックできます。
あぁ、もちろん Window_Command クラスを再定義してね。
SS200808304132.jpg

で、こちらが今回の講座を応用して作成したスクリプトになります。
コメント




 

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


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

できました!
サッポロさん助言ありがとうございます。
【2008/09/04 15:15】 | 通りすがり | [編集]
Window_Gold の親クラスはWindow_Baseですので
Window_Base内で書かれているものが使えるはずです。
draw_icon(icon_index, x, y, enabled = true)
を入れてやればいいんじゃないでしょうか。

CACAOさま正規表現の解説ありがとうございます。
じっくり読んで理解できるように励みます。
【2008/09/04 03:03】 | サッポロ | [編集]
ゴールドウィンドウなどにもアイコンを描写するには…。
旅人の羽根休めさんの
http://file.haneyasume.blog.shinobi.jp/61374fd4.jpeg
のような感じにゴールドウィンドウなどにもアイコンを表示させたいと思っているのですが、
ゴールドウィンドウはclass Window_Command < Window_Selectableではなく
class Window_Gold < Window_Baseで定義?されているので同じ方法では出来ませんよね?

こちらにアイコンを表示させるにはどうすればいいのでしょうか。
【2008/09/03 23:12】 | 通りすがり | [編集]
いつもありがとう^^
> サッポロさんへ
> とても分かりやすい解説ありがとうございます。
いえいえ、そう言ってもらえると嬉しいです。
いつも相手に伝わっているか不安で。

> まだまだ正規表現など分かっていない部分もありますが、
> 本当にたすかりました。ありがとうございます。
明日くらいに、正規表現の講座が表示されると思います。
よければ参考にしてみてください。

> d+ですので()内の数字を繰り返し検索し記憶する
> みたいな感じで覚えておけばいいみたいですね。
表現を間違えただけで、わかっているならいいのですが、
「()内の数字を繰り返し検索し記録する」ではなく、
「()内の1つ以上の数字を記録する」というものです。

/^<(\d+)>/ =~ "<0123>"
前から順に見ていくとわかりやすいですよ。
まず、正規表現"^<"なので、先頭は"<"。文字列も先頭は"<"だからOK。
次は、"\d+"数字の1回以上の繰り返し。文字列は、"0"数字だからOK。
正規表現は、数字の繰り返し中、文字列は、"1"だからOK。
という感じに。

※ バックスラッシュもとい、円マーク(\)は\\で表示できるみたいですよ。
たぶん消えてしまったのだろうと思って。


> kassyiさんへ
> 横やり、失礼でしたら申し訳ありません。
そんなこと無いですよ。
コメントがあると見てくれてるんだと嬉しくなります。
【2008/09/02 21:00】 | CACAO | [編集]
おぉなるほど・・・。含ませるという意味なんですね。
なんとはなしに理解できたつもりです。

メモリー容量に問題のある私のどたまが今にもパンクしそうですので
一度に覚えるよりゆっくり覚えていくほうがよさそうです。
CACAOさま,kassyiさま解説していただきありがとうございました。
ほんとうに助かります。
【2008/09/01 18:06】 | サッポロ | [編集]
a = "boo"
b = "foo#{a}"
p b # => "fooboo"

というようなことが言えます。
つまり"#{変数名}"とすると文字列に「変数名」の中身を
あけて(式展開して)含ませることができるということです。

@commands[index].delete("<#{$1}>")
だと、$1に格納されたアイコンの番号をdelete関数に式展開をして
渡しているわけです。これをしないと、コマンドの名前に
アイコンインデックスが含まれて描かれてしまいますからね。

横やり、失礼でしたら申し訳ありません。
【2008/09/01 15:07】 | kassyi | [編集]
とても分かりやすい解説ありがとうございます。
まだまだ正規表現など分かっていない部分もありますが、
本当にたすかりました。ありがとうございます。


^<(d+)>
d+ですので()内の数字を繰り返し検索し記憶する
みたいな感じで覚えておけばいいみたいですね。

<#{$1}>
これが今一分かりません。
$1に格納された個数回削除という意味であっていますか?
#がヘルプ内にのっていないようなので、頭をひねっています・・・。


【2008/09/01 14:47】 | サッポロ | [編集]
トラックバック
トラックバックURL:
http://cacaosoft.blog42.fc2.com/tb.php/94-14e733a9
≪ トップページへこのページの先頭へ  ≫
カレンダー
07 << 2017/08 >> 09
- - 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 31 - -

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

タグクラウド

リンク
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。