=begin キャッシュ整理用メソッド追加 for VX ver 0.0.0.1         by 半生 http://www.tktkgame.com/ ■ 内容  Cacheモジュールにキャッシュ整理用のメソッドを追加します。 ■ Methods Cache.refresh  解放済みのキャッシュをキャッシュリストから削除します。 Cache.size(filter=false)  キャッシュのされている画像の個数を返します。  filter=trueの場合解放済みキャッシュはカウントしません Cache.delete_animation(filename, hue=0) Cache.delete_battler(filename, hue=0) Cache.delete_character(filename) Cache.delete_face(filename) Cache.delete_parallax(filename) Cache.delete_picture(filename) Cache.delete_system(filename)  キャッシュを個別に削除します Cache.delete_animation2(filename) Cache.delete_battler2(filename)  色相差分も含めてキャッシュを個別に削除します。 Cache.delete_group(group)  キャッシュをグループ毎削除します。 ■ 更新履歴 ver 0.0.0.1 (2010/05/19)  公開 =end module HN;end module HN::CacheUtil REGEX_ANIME = /^Graphics\/Animations\// REGEX_BATTLER = /^Graphics\/Battlers\// REGEX_CHARA = /^Graphics\/Characters\// REGEX_FACE = /^Graphics\/Faces\// REGEX_PARALLAX = /^Graphics\/Parallaxes\// REGEX_PICTURE = /^Graphics\/Pictures\// REGEX_SYSTEM = /^Graphics\/System\// # 解放済みのBitmapオブジェクトをキャッシュから削除する def refresh @cache.delete_if{|key, bitmap| bitmap.disposed?} end # キャッシュのされている画像の個数 def size(filter=false) if filter @cache.select{|key, bitmap| !bitmap.disposed?}.size else @cache.size end end # キャッシュを個別に削除する def delete(folder_name, filename, hue=0) path = folder_name + filename if hue == 0 key = path else key = [path, hue] end if @cache.key?(key) @cache[key].dispose @cache.delete(key) end end # キャッシュを個別に削除する,色相差分も削除する def delete2(folder_name, filename) path = folder_name + filename # 元キャッシュを削除 self.delete(folder_name, filename) # 色相差分キャッシュを削除 @cache.keys.each do |key| if key.is_a?(Array) and key[0] == path self.delete(folder_name, filename, key[1]) end end end # キャッシュをグループ毎削除する。 def delete_group(group) case group when :animation, "animation" regex = HN::CacheUtil::REGEX_ANIME when :battler, "battler" regex = HN::CacheUtil::REGEX_BATTLER when :charactor, "charactor" regex = HN::CacheUtil::REGEX_CHARA when :face, "face" regex = HN::CacheUtil::REGEX_FACE when :parallax, "parallax" regex = HN::CacheUtil::RREGEX_PARALLAX when :picture, "picture" regex = HN::CacheUtil::REGEX_PICTURE when :system, "system" regex = HN::CacheUtil::REGEX_SYSTEM else return end delete_list = [] @cache.each do |key, bitmap| if bitmap.disposed? delete_list.push(key) next end if key.is_a?(Array) if key[0][regex] bitmap.dispose delete_list.push(key) end else if key[regex] bitmap.dispose delete_list.push(key) end end end delete_list.each do |key| @cache.delete(key) end end # アニメーションキャッシュを個別に削除 def delete_animation(filename, hue=0) self.delete("Graphics/Animations/", filename, hue) end # アニメーションキャッシュを個別に削除,色相差分も削除する def delete_animation2(filename) self.delete2("Graphics/Animations/", filename) end # バトラーキャッシュを個別に削除 def delete_battler(filename, hue=0) self.delete("Graphics/Battlers/", filename, hue) end # バトラーキャッシュを個別に削除,色相差分も削除する def delete_battler2(filename) self.delete2("Graphics/Battlers/", filename) end # 歩行グラキャッシュを個別に削除 def delete_character(filename) self.delete("Graphics/Characters/", filename) end # 顔グラキャッシュを個別に削除 def delete_face(filename) self.delete("Graphics/Faces/", filename) end # 遠景キャッシュを個別に削除 def delete_parallax(filename) self.delete("Graphics/Parallaxes/", filename) end # ピクチャキャッシュを個別に削除 def delete_picture(filename) self.delete("Graphics/Pictures/", filename) end # システムキャッシュを個別に削除 def delete_system(filename) self.delete("Graphics/System/", filename) end end # Chacheモジュールに組み込む Cache.extend HN::CacheUtil