赞 | 0 |
VIP | 0 |
好人卡 | 0 |
积分 | 1 |
经验 | 4009 |
最后登录 | 2013-12-15 |
在线时间 | 98 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 50
- 在线时间
- 98 小时
- 注册时间
- 2010-6-18
- 帖子
- 14
|
因为好像和其他脚本冲突了..求教
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_
#_/ ◆ Animated Menu Cursor - KGC_CursorAnimation ◆ VX ◆
#_/ ◇ Last Update: 2009/02/15 ◇
#_/ ◆ Translation by Mr. Anonymous ◆
#_/-----------------------------------------------------------------------------
#_/ Installation: Insert this script above main.
#_/=============================================================================
#_/ This script allows you to display an animated cursor on selectable menu
#_/ items.
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_
#==============================================================================#
# ★ Customization ★ #
#==============================================================================#
module KGC
module CursorAnimation
# ◆ Cursor Switch ◆
# You may specify the in-game switch that enables/disables the cursor.
SWITCH_ID = 20
# ◆ Cursor Start Display ◆
# true : Cursor is persistant (from the title screen onwards)
# false : Cursor is only displayed when a switch is turned on (SWITCH_ID)
DEFAULT_ANIMATION = true
# ◆ Cursor Animation Image File ◆
# This defines the cursor file located in "Graphics/System".
ANIMATION_FILE = "CursorAnimation"
# ◆ Cursor Animation Frame Count ◆
# This defines the amount of cells the animation uses from the cursor file.
FRAME_COUNT = 12
# ◆ Cursor Animation Wait Time ◆
# This defines the amount of frames between switching animation cells.
# Larger number = slower animation
# Smaller number = faster animation
ANIMATION_WAIT = 3
# ◆ Cursor Opacity ◆
# Opacity/Translucency (Max = 255)
OPACITY = 224
# ◆ Cursor Animation Blending ◆
# Blending Type
# 0. Normal 1. Add 2. Subtract
BLEND_TYPE = 1
# ◆ Base Cursor Selection Position ◆
# 0..On 1..Center 2..Under
BASE_POSITION = 1
# ◆ Cursor Alightment [x, y] ◆
# This defines the position of the cursor.
POSITION_REV = [-4, 0]
end
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 |
|