赞 | 0 |
VIP | 0 |
好人卡 | 0 |
积分 | 2 |
经验 | 4562 |
最后登录 | 2017-12-10 |
在线时间 | 78 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 215
- 在线时间
- 78 小时
- 注册时间
- 2010-7-1
- 帖子
- 58
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
本帖最后由 abc1236762 于 2010-8-26 20:31 编辑
http://ytomy.sakura.ne.jp/tkool/ ... ch=cursor_animation- #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
- #_/ ◆ カーソルアニメーション - KGC_CursorAnimation ◆ VX ◆
- #_/ ◇ Last update : 2009/02/15 ◇
- #_/----------------------------------------------------------------------------
- #_/ カーソルの位置にアニメーションを表示します。
- #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
- #==============================================================================
- # ★ カスタマイズ項目 - Customize BEGIN ★
- #==============================================================================
- module KGC
- module CursorAnimation
- # ◆ アニメ表示 ON/OFF を切り替えるスイッチ ID
- # この ID のスイッチがオンの間、カーソルアニメが表示されます。
- SWITCH_ID = 20
- # ◆ 最初からカーソルアニメを表示する
- # true : タイトルなどでもアニメを表示します。
- # false : ゲーム中にスイッチを切り替えるまで表示しません。
- DEFAULT_ANIMATION = true
- # ◆ アニメファイル名
- # "Graphics/System" から読み込む。
- ANIMATION_FILE = "CursorAnimation"
- # ◆ アニメーションのフレーム数
- FRAME_COUNT = 12
- # ◆ アニメーションウェイト
- # 数値が大きいほどアニメが遅くなる。
- ANIMATION_WAIT = 4
- # ◆ 不透明度
- OPACITY = 224
- # ◆ 合成方法
- # 0..通常 1..加算 2..減算
- BLEND_TYPE = 1
- # ◆ 基準位置
- # 0..上 1..中央 2..下
- BASE_POSITION = 1
- # ◆ 表示位置補正 [x, y]
- POSITION_REV = [-4, 0]
- end
- end
- #==============================================================================
- # ☆ カスタマイズ項目終了 - Customize END ☆
- #==============================================================================
- $imported = {} if $imported == nil
- $imported["CursorAnimation"] = true
- #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
- #==============================================================================
- # ■ Module_Graphics
- #==============================================================================
- module Graphics
- module_function
- #--------------------------------------------------------------------------
- # ● フレーム更新
- #--------------------------------------------------------------------------
- class << Graphics
- unless method_defined?(:update_KGC_CursorAnimation)
- alias update_KGC_CursorAnimation update
- end
- end
- def update
- update_KGC_CursorAnimation
- Window_Base.update_cursor_animation
- end
- end
- #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
- #==============================================================================
- # ■ Window_Base
- #==============================================================================
- class Window_Base < Window
- #--------------------------------------------------------------------------
- # ○ クラス変数
- #--------------------------------------------------------------------------
- @@__cursor_animation = nil # カーソルアニメ
- #--------------------------------------------------------------------------
- # ● オブジェクト初期化
- # x : ウィンドウの X 座標
- # y : ウィンドウの Y 座標
- # width : ウィンドウの幅
- # height : ウィンドウの高さ
- #--------------------------------------------------------------------------
- alias initialize_KGC_CursorAnimation initialize
- def initialize(x, y, width, height)
- initialize_KGC_CursorAnimation(x, y, width, height)
- @@__cursor_animation.add_window(self)
- end
- #--------------------------------------------------------------------------
- # ● 解放
- #--------------------------------------------------------------------------
- unless method_defined?(:dispose_KGC_CursorAnimation)
- alias dispose_KGC_CursorAnimation dispose
- end
- def dispose
- @@__cursor_animation.remove_window(self)
- dispose_KGC_CursorAnimation
- end
- #--------------------------------------------------------------------------
- # ○ カーソルアニメを表示
- #--------------------------------------------------------------------------
- def self.show_cursor_animation
- @@__cursor_animation.visible = true
- @@__cursor_animation.update
- end
- #--------------------------------------------------------------------------
- # ○ カーソルアニメを隠す
- #--------------------------------------------------------------------------
- def self.hide_cursor_animation
- @@__cursor_animation.visible = false
- @@__cursor_animation.update
- end
- #--------------------------------------------------------------------------
- # ○ カーソルアニメを更新
- #--------------------------------------------------------------------------
- def self.update_cursor_animation
- @@__cursor_animation.update
- end
- end
- #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
- #==============================================================================
- # □ Sprite_CursorAnimation
- #------------------------------------------------------------------------------
- # カーソルアニメーション用の処理を追加したスプライトのクラスです。
- #==============================================================================
- class Sprite_CursorAnimation < Sprite
- #--------------------------------------------------------------------------
- # ● オブジェクト初期化
- # viewport : ビューポート
- #--------------------------------------------------------------------------
- def initialize(viewport = nil)
- super(viewport)
- @duration = 0
- @frame_count = 0
- self.bitmap = Cache.system(KGC::CursorAnimation::ANIMATION_FILE)
- self.src_rect.width = bitmap.width / 8
- self.src_rect.height = bitmap.height /
- ([KGC::CursorAnimation::FRAME_COUNT - 1, 0].max / 8 + 1)
- self.ox = src_rect.width / 2
- self.oy = src_rect.height / 2
- self.opacity = KGC::CursorAnimation::OPACITY
- self.blend_type = KGC::CursorAnimation::BLEND_TYPE
- end
- #--------------------------------------------------------------------------
- # ● フレーム更新
- #--------------------------------------------------------------------------
- def update
- super
- return unless visible
- @frame_count += 1
- return if @frame_count % KGC::CursorAnimation::ANIMATION_WAIT != 0
- @frame_count = 0
- @duration -= 1
- if @duration < 0
- @duration = KGC::CursorAnimation::FRAME_COUNT - 1
- end
- update_animation
- end
- #--------------------------------------------------------------------------
- # ○ アニメーションを更新
- #--------------------------------------------------------------------------
- def update_animation
- self.src_rect.x = src_rect.width * (@duration % 8)
- self.src_rect.y = src_rect.height * (@duration / 8)
- end
- end
- #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
- #==============================================================================
- # □ Cursor_Animation
- #------------------------------------------------------------------------------
- # カーソル周りのアニメーションを扱うクラスです。
- #==============================================================================
- class Cursor_Animation
- #--------------------------------------------------------------------------
- # ○ 公開インスタンス変数
- #--------------------------------------------------------------------------
- attr_accessor :visible
- #--------------------------------------------------------------------------
- # ○ オブジェクト初期化
- #--------------------------------------------------------------------------
- def initialize
- @visible = false
- @viewport = Viewport.new(0, 0, 640, 480)
- @windows = []
- @target_sprite = Sprite_CursorAnimation.new(@viewport)
- @active_window = nil
- @viewport.visible = false
- @viewport.z = 30000
- end
- #--------------------------------------------------------------------------
- # ○ 破棄
- #--------------------------------------------------------------------------
- def dispose
- @target_sprite.dispose
- @viewport.dispose
- end
- #--------------------------------------------------------------------------
- # ○ ウィンドウ追加
- #--------------------------------------------------------------------------
- def add_window(*window)
- @windows |= window.find_all { |w|
- w.is_a?(Window_Selectable) || w.is_a?(Window_SaveFile)
- }
- @windows.flatten!
- end
- #--------------------------------------------------------------------------
- # ○ ウィンドウ削除
- #--------------------------------------------------------------------------
- def remove_window(*window)
- @windows -= window
- end
- #--------------------------------------------------------------------------
- # ○ フレーム更新
- #--------------------------------------------------------------------------
- def update
- @viewport.update
- @target_sprite.update
- # 座標調整
- dest_x, dest_y = get_cursor_pos
- if @target_sprite.x != dest_x
- if (dest_x - @target_sprite.x).abs < 4
- @target_sprite.x = dest_x
- else
- dist = (dest_x - @target_sprite.x) / 4
- dist = (dist > 0 ? [dist, 4].max : [dist, -4].min)
- @target_sprite.x += dist
- end
- end
- if @target_sprite.y != dest_y
- if (dest_y - @target_sprite.y).abs < 4
- @target_sprite.y = dest_y
- else
- dist = (dest_y - @target_sprite.y) / 4
- dist = (dist > 0 ? [dist, 4].max : [dist, -4].min)
- @target_sprite.y += dist
- end
- end
- end
- #--------------------------------------------------------------------------
- # ○ カーソル位置取得
- # [x, y] の形で返す。
- #--------------------------------------------------------------------------
- def get_cursor_pos
- dx = 0
- dy = 0
- # 可視状態のアクティブウィンドウを取得
- unless window_active?(@active_window)
- @active_window = search_active_window
- end
- # アクティブウィンドウがなければ非表示
- if @active_window == nil || !$game_switches[KGC::CursorAnimation::SWITCH_ID]
- @viewport.visible = false
- dx = Graphics.width / 2
- dy = Graphics.height / 2
- return [dx, dy]
- end
- @viewport.visible = @visible
- # カーソル位置を計算
- rect = @active_window.cursor_rect
- dx = rect.x + 16 + KGC::CursorAnimation::POSITION_REV[0]
- dy = rect.y + 16 + KGC::CursorAnimation::POSITION_REV[1]
- vp = @active_window.viewport
- if vp != nil
- dx += vp.rect.x - vp.ox
- dy += vp.rect.y - vp.oy
- end
- dx += @active_window.x
- dy += @active_window.y
- case KGC::CursorAnimation::BASE_POSITION
- when 0 # 上
- dy += @target_sprite.oy
- when 1 # 中央
- dy += rect.height / 2
- when 2 # 下
- dy += rect.height - @target_sprite.oy
- end
- return [dx, dy]
- end
- #--------------------------------------------------------------------------
- # ○ ウィンドウの可視・アクティブ状態判定
- #--------------------------------------------------------------------------
- def window_active?(window)
- return false if window == nil
- return false if window.disposed?
- return false unless window.visible
- if window.is_a?(Window_Selectable)
- return true if window.active
- elsif window.is_a?(Window_SaveFile)
- return true if window.selected
- end
- return false
- end
- #--------------------------------------------------------------------------
- # ○ アクティブウィンドウを探す
- #--------------------------------------------------------------------------
- def search_active_window
- return @windows.find { |w|
- if !w.visible
- false
- elsif w.is_a?(Window_Selectable)
- w.active && w.index >= 0
- elsif w.is_a?(Window_SaveFile)
- w.selected
- else
- false
- end
- }
- end
- end
- #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
- #==============================================================================
- # ■ Scene_Base
- #==============================================================================
- class Scene_Base
- #--------------------------------------------------------------------------
- # ● 開始処理
- #--------------------------------------------------------------------------
- alias start_KGC_CursorAnimation start
- def start
- Window_Base.show_cursor_animation
- start_KGC_CursorAnimation
- end
- #--------------------------------------------------------------------------
- # ● 終了前処理
- #--------------------------------------------------------------------------
- alias pre_terminate_KGC_CursorAnimation pre_terminate
- def pre_terminate
- Window_Base.hide_cursor_animation
- pre_terminate_KGC_CursorAnimation
- end
- end
- #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
- #==============================================================================
- # ■ Scene_Title
- #==============================================================================
- if KGC::CursorAnimation::DEFAULT_ANIMATION
- class Scene_Title < Scene_Base
- #--------------------------------------------------------------------------
- # ● 各種ゲームオブジェクトの作成
- #--------------------------------------------------------------------------
- alias create_game_objects_KGC_CursorAnimation create_game_objects
- def create_game_objects
- create_game_objects_KGC_CursorAnimation
- $game_switches[KGC::CursorAnimation::SWITCH_ID] = true
- end
- end
- end # <-- if KGC::CursorAnimation::DEFAULT_ANIMATION
- #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
- #==============================================================================
- # ■ Scene_Battle
- #==============================================================================
- class Scene_Battle < Scene_Base
- #--------------------------------------------------------------------------
- # ● 逃走の処理
- #--------------------------------------------------------------------------
- alias process_escape_KGC_CursorAnimation process_escape
- def process_escape
- @party_command_window.active = false
- process_escape_KGC_CursorAnimation
- end
- end
- class Window_Base < Window
- @@__cursor_animation = Cursor_Animation.new
- end
复制代码 在rmvx顯示的效果
有誰可以 |
|