RPGツクールXP/VX用のRGSS素材です。
一部英語版対応です。
(A few materials can be used for English RPG MAKER XP/VX.)
競合率はルファーの独断と偏見なのでたまにハズレます。
↑スクリーンショット (クリックで拡大)
#==============================================================================
# ■ 画面のズームぼかしエフェクト
#------------------------------------------------------------------------------
# 画面に「ズームぼかし」という効果をかけます。
# (C) ルファー
# WebSite https://tkoolerlufar.pages.dev/
#==============================================================================
=begin
=対応RGSS
2
=他の素材との競合の可能性
... きっとない
= 簡単な使い方。
Graphics.zooming_blur = true でぼかしを始め、
Graphics.zooming_blur = false でぼかしを終えます。
= ちょっと凝った使い方
* Graphics.zooming_blur_strength = (数値) でぼかしの強さを変えられます。
大きいほど強いぼかしになり、0 にするとぼかさなくなります。
既定では 128 です。
204 くらいにすると、一瞬何が書いてあるかわからなくなります。
* Graphics.zooming_blur_ratio = (数値) でぼかしの拡大率を変えられます。
* Graphics.zooming_blur_cycle = (数値) でぼかし効果の更新周期を変えられます。
処理が重いと感じたら、大きめの値をセットしてみてください。
公開当初のバージョンと同じ効果が欲しいときは 1 に設定してください。
既定では 2 です。
= 注意事項
ズームぼかしの状態はセーブされません。
ズームぼかしをONにしてる間はイベントが終わらないなどして
セーブさせないようにしてください。
= おまけ機能
Lufar.zooming_blur_origin = (数値) で、ぼかしの「原点」を変えられます。
原点を変えると、例えば左上隅を原点にすると、
左上に向かってズームするようにぼけます。
原点の数値はパソコンのテンキーボードに対応しており、5 が中心です。
つまりこう。
+-+-+-+
|7|8|9|
+-+-+-+
|4|5|6|
+-+-+-+
|1|2|3|
+-+-+-+
= テクニック
* Graphics.zooming_blur_ratio を 1 に設定すると
線形モーションぼかし ('90年くらいの LCD みたいな残像効果) になります。
* Graphics.zooming_blur_strength を 0 からちょっとずつ増やせば
ちょっとずつぼかしが強くなります。
* Graphics.zooming_blur_origin を 0 に設定すれば
Graphics.zooming_blur が true のままでもぼかしをかけなくなります。
=更新履歴
2015/01/31 注意事項を追加、パフォーマンス改善、他軽微なバグを修正
2013/02/10 説明文を若干訂正、演出を微調整
2013/02/08 プロパティ追加、既定値を微調整
2010/04/13 公開
=再定義しているメソッド (いずれもエイリアス使用)
Graphics.update
=新規定義しているメソッド
Graphics._Lufar_ZoomingBlur_MakeTemporaryScreenSprite
Graphics._Lufar_ZoomingBlur_Valid?
Graphics.zooming_blur
Graphics.zooming_blur=
Graphics.zooming_blur_ratio
Graphics.zooming_blur_ratio=
Graphics.zooming_blur_strength
Graphics.zooming_blur_strength=
Graphics.zooming_blur_cycle
Graphics.zooming_blur_cycle=
Graphics.zooming_blur_origin
Graphics.zooming_blur_origin=
=end
#----------------------------------------------------------------------------
# ◆ Graphics モジュール
#----------------------------------------------------------------------------
module Graphics
#--------------------------------------------------------------------------
# ○ クラス変数
#--------------------------------------------------------------------------
@@_Lufar_ZoomingBlur_TemporaryScreenSprite = nil
@@_Lufar_ZoomingBlur_ZoomingBlur = false
@@_Lufar_ZoomingBlur_RatioOfZoomingBlur = 1.0625
@@_Lufar_ZoomingBlur_StrengthOfZoomingBlur = 0x80
@@_Lufar_ZoomingBlur_CycleOfZoomingBlur = 2
@@_Lufar_ZoomingBlur_OriginOfZoomingBlur = 5
#--------------------------------------------------------------------------
# ○ ズームぼかし用一時画面スプライトの作成
#--------------------------------------------------------------------------
def self._Lufar_ZoomingBlur_MakeTemporaryScreenSprite
# 必要ならばスプライトを作成
self._Lufar_ZoomingBlur_WhenSpriteExists(false) do
@@_Lufar_ZoomingBlur_TemporaryScreenSprite = Sprite.new
end
# 設定を反映
@@_Lufar_ZoomingBlur_TemporaryScreenSprite.z = 0x7fffffff
self.zooming_blur_ratio = self.zooming_blur_ratio
self.zooming_blur_strength = self.zooming_blur_strength
self.zooming_blur_origin = self.zooming_blur_origin
end
#--------------------------------------------------------------------------
# ○ ズームぼかし用一時画面スプライトが存在するときのみイテレータを実行
# flag : 偽だと逆にスプライトが存在しないときのみ実行する
#--------------------------------------------------------------------------
def self._Lufar_ZoomingBlur_WhenSpriteExists(flag = true)
yield if !flag == (
@@_Lufar_ZoomingBlur_TemporaryScreenSprite.nil? or
@@_Lufar_ZoomingBlur_TemporaryScreenSprite.disposed?)
end
#--------------------------------------------------------------------------
# ○ ズームぼかしフラグの取得
#--------------------------------------------------------------------------
def self.zooming_blur
@@_Lufar_ZoomingBlur_ZoomingBlur
end
#--------------------------------------------------------------------------
# ○ ズームぼかしフラグの設定
# flag : 設定する値
#--------------------------------------------------------------------------
def self.zooming_blur=(flag)
# フラグが立ったらスプライト作成
if @@_Lufar_ZoomingBlur_ZoomingBlur = flag
self._Lufar_ZoomingBlur_WhenSpriteExists(false) do
_Lufar_ZoomingBlur_MakeTemporaryScreenSprite
end
# フラグが倒れたらスプライト解放
else
self._Lufar_ZoomingBlur_WhenSpriteExists do
unless @@_Lufar_ZoomingBlur_TemporaryScreenSprite.bitmap.nil? or
@@_Lufar_ZoomingBlur_TemporaryScreenSprite.bitmap.disposed?
@@_Lufar_ZoomingBlur_TemporaryScreenSprite.bitmap.dispose
end
@@_Lufar_ZoomingBlur_TemporaryScreenSprite.dispose
end
end
end
#--------------------------------------------------------------------------
# ○ ズームぼかし倍率の取得
#--------------------------------------------------------------------------
def self.zooming_blur_ratio
@@_Lufar_ZoomingBlur_RatioOfZoomingBlur
end
#--------------------------------------------------------------------------
# ○ ズームぼかし倍率の設定
# val : 設定する値
#--------------------------------------------------------------------------
def self.zooming_blur_ratio=(val)
unless val.is_a?(Numeric) and val >= 1
raise(val.is_a?(Numeric) ? ArgumentError : TypeError,
"1以上の数で指定してください(#{val.inspect})", caller)
end
@@_Lufar_ZoomingBlur_RatioOfZoomingBlur = val
# スプライトがあれば設定を即反映
self._Lufar_ZoomingBlur_WhenSpriteExists do
@@_Lufar_ZoomingBlur_TemporaryScreenSprite.zoom_x =
@@_Lufar_ZoomingBlur_TemporaryScreenSprite.zoom_y =
self.zooming_blur_ratio
end
end
#--------------------------------------------------------------------------
# ○ ズームぼかし強度の取得
#--------------------------------------------------------------------------
def self.zooming_blur_strength
@@_Lufar_ZoomingBlur_StrengthOfZoomingBlur
end
#--------------------------------------------------------------------------
# ○ ズームぼかし強度の設定
# val : 設定する値
#--------------------------------------------------------------------------
def self.zooming_blur_strength=(val)
unless val.is_a?(Integer) and val.between?(0x00, 0xfe)
raise(val.is_a?(Integer) ? ArgumentError : TypeError,
"0以上254以下の整数で指定してください(#{val.inspect})", caller)
end
@@_Lufar_ZoomingBlur_StrengthOfZoomingBlur = val
# スプライトがあれば設定を即反映
self._Lufar_ZoomingBlur_WhenSpriteExists do
@@_Lufar_ZoomingBlur_TemporaryScreenSprite.opacity =
self.zooming_blur_strength
end
end
#--------------------------------------------------------------------------
# ○ ズームぼかし周期の取得
#--------------------------------------------------------------------------
def self.zooming_blur_cycle
@@_Lufar_ZoomingBlur_CycleOfZoomingBlur
end
#--------------------------------------------------------------------------
# ○ ズームぼかし周期の設定
# val : 設定する値
#--------------------------------------------------------------------------
def self.zooming_blur_cycle=(val)
unless val.is_a?(Integer) and val > 0
raise(val.is_a?(Integer) ? ArgumentError : TypeError,
"1以上の整数で指定してください(#{val.inspect})", caller)
end
@@_Lufar_ZoomingBlur_CycleOfZoomingBlur = val
end
#--------------------------------------------------------------------------
# ○ ズームぼかし原点の取得
#--------------------------------------------------------------------------
def self.zooming_blur_origin
@@_Lufar_ZoomingBlur_OriginOfZoomingBlur
end
#--------------------------------------------------------------------------
# ○ ズームぼかし原点の設定
# val : 設定する値
#--------------------------------------------------------------------------
def self.zooming_blur_origin=(val)
unless val.is_a?(Integer) and val.between?(0, 9)
raise(val.is_a?(Integer) ? ArgumentError : TypeError,
"0以上9以下の整数で指定してください(#{val.inspect})", caller)
end
@@_Lufar_ZoomingBlur_OriginOfZoomingBlur = val
# スプライトがあれば設定を即反映
self._Lufar_ZoomingBlur_WhenSpriteExists do
@@_Lufar_ZoomingBlur_TemporaryScreenSprite.visible =
self.zooming_blur_origin != 0
end
end
#--------------------------------------------------------------------------
# ○ プロパティのエイリアス
#--------------------------------------------------------------------------
instance_eval do
alias lufar_zooming_blur zooming_blur
alias lufar_zooming_blur= zooming_blur=
alias lufar_zooming_blur_ratio zooming_blur_ratio
alias lufar_zooming_blur_ratio= zooming_blur_ratio=
alias lufar_zooming_blur_strength zooming_blur_strength
alias lufar_zooming_blur_strength= zooming_blur_strength=
alias lufar_zooming_blur_cycle zooming_blur_cycle
alias lufar_zooming_blur_cycle= zooming_blur_cycle=
alias lufar_zooming_blur_origin zooming_blur_origin
alias lufar_zooming_blur_origin= zooming_blur_origin=
end
#--------------------------------------------------------------------------
# ○ ぼかし有効判定
#--------------------------------------------------------------------------
def self._Lufar_ZoomingBlur_Valid?
# フラグが立っていても、その他のパラメーターが無効ならぼかし無効
zooming_blur and
zooming_blur_strength > 0 and
zooming_blur_origin > 0
end
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
unless defined? _Lufar_ZoomingBlur_Update
instance_eval do
alias _Lufar_ZoomingBlur_Update update
end
end
def self.update
# フレーム更新
_Lufar_ZoomingBlur_Update
# ぼかしが無効ならここまで
return unless _Lufar_ZoomingBlur_Valid?
# ぼかし更新周期でなければここまで
return if (self.frame_count - 1) % zooming_blur_cycle != 0
# 一時画面スプライトがないか解放されていれば作り直す
self._Lufar_ZoomingBlur_WhenSpriteExists(false) do
_Lufar_ZoomingBlur_MakeTemporaryScreenSprite
end
# 名前の短いローカル変数に参照をセット
temporary_screen_sprite = @@_Lufar_ZoomingBlur_TemporaryScreenSprite
# ビットマップが解放されていれば作り直す
if temporary_screen_sprite.bitmap.nil? or
temporary_screen_sprite.bitmap.disposed?
bmp = Bitmap.new(self.width, self.height)
# 画面解像度が変えられていればビットマップを作り直す
elsif self.width != temporary_screen_sprite.bitmap.width or
self.height != temporary_screen_sprite.bitmap.height
temporary_screen_sprite.bitmap.dispose
bmp = Bitmap.new(self.width, self.height)
else
bmp = temporary_screen_sprite.bitmap
end
# ぼかしを更新
temporary_screen_sprite.bitmap = self.snap_to_bitmap
bmp.dispose
# スプライトの矩形を更新
temporary_screen_sprite.x = Graphics.width *
((zooming_blur_origin - 1) % 3) / 2
temporary_screen_sprite.y = Graphics.height *
((9 - zooming_blur_origin) / 3) / 2
temporary_screen_sprite.ox = temporary_screen_sprite.bitmap.width *
((zooming_blur_origin - 1) % 3) / 2
temporary_screen_sprite.oy = temporary_screen_sprite.bitmap.height *
((9 - zooming_blur_origin) / 3) / 2
temporary_screen_sprite.zoom_x =
temporary_screen_sprite.zoom_y = zooming_blur_ratio
end
end
戻る