独学ツクールブログ

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

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

[ - ] スポンサーサイト

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

| 2018.05.23 Wednesday | - | - |

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

〜前回のあらすじ〜
書き終えて早々改善点を発見orz

今回は、分類された各カテゴリのアイテム一覧のウィンドウであるWindow_CategorizedItemクラスの定義に入る。
前回同様、ベースはWindow_Itemクラスだが大幅に改造していく。



早速initializeメソッドから。

def initialize(element)
  super(0, 128, 640, 352)
  @column_max = 2
  @element = element
  refresh
  self.index = 0
end
引数を一つ取るようにしたのは、のちのScene_Itemクラスのためである。ウィンドウ生成時にカテゴリIDの配列からひとつひとつIDを取得し、それに対応した処理を行うという設計にするからだ。
まずは前回同様superでウィンドウの土台を定義。
今回は項目数が不定なので@item_maxは設定せず、@column_maxはデフォルトの2に
elementに受け取っているIDを@elementに代入。インスタンス変数を使用するのは、refreshメソッドに引数を付けなくてもいいようにするため。こうしておかないとのちのシーンクラスで手間がかかるのだ。。
そしてWindow_Category同様refreshメソッドを呼んでから@indexを0にしてカーソルを先頭へ。
def selected_item
  return @data[self.index]
end
続くselected_itemメソッドはScene_Itemにてアイテムを選んだ際にそのアイテムの情報を返すためのメソッド。
ここでのself.indexはウィンドウでカーソルの当っているインデックスのことである。

refreshメソッドは大きいので今回と次回に分割して少しずつ解説していく。
if self.contents
  self.contents.dispose
  self.contents = nil
end
@data = []
contentsはウィンドウの中身なので、中身が何かあるかどうかは「nilでないかどうか」ど同義だ。しかしRubyでnilとfalseでないものは全てtrueなので、「if 〜 != nil」と書くのは馬鹿げている。よってその部分は削除。
もしウィンドウの中身が何かあるなら、いったんそれをdisposeで解放し、nilを代入することで完全にクリアする。
空の配列@dataを用意。これにはこの後の部分で条件を満たしたアイテムや武器、防具を格納する。
$data_items.each_with_index { |item, index|
  if $game_party.item_number(index) != 0 && item.element_set.include?(@element)
    @data << item
  end
}
Array#each_with_indexは配列の要素とインデックスをセットにしてブロックに渡す。Game_Party#item_numberはパーティがアイテムを持っている数を返すので、indexを渡して戻り値が0でなければそのアイテムIDのアイテムを持っていることになる。Array#include?メソッドは引数と同じ値が配列に含まれているかどうかを返すので、@elementを渡して戻り値がtrueならアイテムはelementに対応する属性を持っていることになる。
ということで、IDが@elementであり1つ以上パーティが所持しているアイテムのみこの条件を満たすということになる。
条件を満たしたアイテムは配列@dataに格納する。

武器については上記のitemをweaponにするだけなので割愛。
ちなみに、@dataに格納するかどうかは上記のとおり所持数と属性しか見ていないので、故意にせよ過失にせよもしアイテムと武器で同じカテゴリ属性を付けているものがあれば同時に格納される。これはカスタマイズのポイントでもある。


次回は防具とアクセサリの格納と、項目の描画メソッドを呼ぶところまで。


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

| 2011.01.27 Thursday 21:55 | comments(0) | trackbacks(0) |

[ - ] スポンサーサイト

| 2018.05.23 Wednesday 21:55 | - | - |

コメント

コメントする






この記事のトラックバック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