独学ツクールブログ

ツクールでのオリジナル作品の話を中心に創作関係の徒然な語り。

<< RGSS奮闘記23:アイテムを分類する5 | main | RGSS奮闘記25:アイテムを分類する7 >>

[ - ] スポンサーサイト

一定期間更新がないため広告を表示しています

| 2018.05.23 Wednesday | - | - |

[ RGSS奮闘記 ] RGSS奮闘記24:アイテムを分類する6

〜前回のあらすじ〜
エンプティ・ダンプティ(オチなし


前回の最後に呼び出していたdraw_itemメソッドの実装。
まずは前半。

def draw_item(index)
  item = @data[index]
  case item
  when RPG::Item
    number = $game_party.item_number(item.id)
  when RPG::Weapon
    number = $game_party.weapon_number(item.id)
  when RPG::Armor
    number = $game_party.armor_number(item.id)
  end
  if item.instance_of?(RPG::Item) && $game_party.item_can_use?(item.id)
    self.contents.font.color = normal_color
  else
    self.contents.font.color = disabled_color
  end
まずはindexをもとにアイテムを取得。
そしてアイテムの種類をcaseで判別する。ここで見慣れない文字「RPG::Item」などがあるが、これはアイテムや武器、防具の所属しているクラスである。このようにwhen節にクラスを書くと、判定したいオブジェクトがそのクラスに属しているときにtrueとなる。ということで、ここではitemアイテム、武器、防具のどれであるかによってnumberに入れる所持数の取得の仕方をそれぞれ変えているということになる。
続くifでの新登場メソッドinstance_of?とitem_can_use?だが、前者は全てのオブジェクトが持つメソッドで、引数に指定したクラスに直接属するかどうかを判定する。後者はGame_Partyクラスのメソッドで、アイテムが使用可能な設定であるかどうかを判定する。この判定は、ウィンドウ内でのアイテム名の描画色変更に利用している。それがif内のself.contents.font.color指定部分で、使用可能アイテムはnormal_color、不可能アイテムはdisabled_colorを設定している。


続いて後半。
  x = index % 2 * 320
  y = index / 2 * 32
  rect = Rect.new(x, y, self.width / @column_max - 32, 32)
  self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
  bitmap = RPG::Cache.icon(item.icon_name)
  opacity = self.contents.font.color == normal_color ? 255 : 128
  self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
  self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
  self.contents.draw_text(x + 240, y, 16, 32, ":", 1)
  self.contents.draw_text(x + 256, y, 24, 32, number.to_s, 2)
end
まずは描画する座標を設定する。今回はデフォルトと同じ2列表示なので、xは0または320だ。剰余記号を使うと2で割った余り、つまり偶数は0、奇数は1が返るので、それに320を掛けることで対応する値を取得できる。
yは逆に余りの切り捨てを利用する。Rubyでは整数を整数で割ると余りが無視され商のみが返る。よってindexが0と1は0、2と3は1……という風にふたつずつ同じ値が得られる。これに1行の高さである32を掛けることで対応する値を取得できる。
rectの定義とfill_rectメソッドの実行は第3回と同じことなので省略。幅については1回しか使わないので直接計算している点に注意。
変数bitmapに代入しているのは描画するアイテムに設定されたアイコンである。「RPG::Cache.xxx」はツクールにインポートした画像を取得する一般的な表記だ。
opacityは不透明度の設定だ。ここで使用している記法は「三項演算子」といいifの簡略形だ。これは下記と同じ意味になる。
if self.contents.font.color == normal_color
  opacity = 255
else
  opacity = 128
end
つまり、?の左にある式がtrueを返せば:の左を、falseを返せば右を、全体の戻り値として返すということだ。ということでこれは文字色がnormal_colorなら不透明、そうでない(disabled_color)なら半透明を指定するということになる。
続く4行がいよいよ項目の描画である。
bltメソッドは、第3引数に指定した画像の第4引数に指定した範囲を取得し、第1引数と第2引数に指定した座標に表示するものである。ここでは、項目を描画する区域の先頭にアイコン画像を表示させている。「+ 4」はカーソルの表示位置にアイコンの位置を合わせるための調整である。
draw_textメソッド自体の説明は割愛。アイテム名、コロン、アイテム所持数を左から順に表示させている。


次回はヘルプテキスト更新部分とクラスのまとめ。


タグ:[Ruby] [RGSS] [素材] [Scene_Item]

| 2011.01.29 Saturday 19:30 | comments(0) | trackbacks(0) |

[ - ] スポンサーサイト

| 2018.05.23 Wednesday 19:30 | - | - |

コメント

コメントする






この記事のトラックバックURL

トラックバック

このページの先頭へ▲

Twitter

WebClap

Blogram

ブログランキングならblogram

calendar

S M T W T F S
   1234
567891011
12131415161718
19202122232425
262728293031 
<< July 2020 >>

categories

archives

Amazon

selected entries

recent comment

recent trackback

recent ranking

links

search this site.

sponsored links

others

mobile

qrcode

powered

無料ブログ作成サービス JUGEM