Project1
标题:
誰可以幫我把一個腳本改成可以在xp執行
[打印本页]
作者:
abc1236762
时间:
2010-8-25 21:46
标题:
誰可以幫我把一個腳本改成可以在xp執行
本帖最后由 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顯示的效果
有誰可以
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1