赞 | 0 |
VIP | 0 |
好人卡 | 0 |
积分 | 1 |
经验 | 18678 |
最后登录 | 2021-1-2 |
在线时间 | 61 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 95
- 在线时间
- 61 小时
- 注册时间
- 2008-1-19
- 帖子
- 121
|
一个小脚本.转自 みんと{/cy}
- #◆◇◆◇◆ BGS自動演奏スクリプトVX ver 1.04 ◇◆◇◆◇
- # サポート掲示板 http://www2.ezbbs.net/21/minto-aaa/
- # by みんと
- =begin
- ■ 更新履歴
- ○ ver 1.04(2009/02/01)
- 場所移動が正常に動作しないミスを修正。
- ○ ver 1.03(2008/07/13)
- 前回更新のミスを修正。
- ○ ver 1.02(2008/07/13)
- 環境イベントでなくてもBGSがなるミスを修正。
- ○ ver 1.01(2008/07/01)
- 無効なイベントで落ちるミスを修正。
- ■ 説明
- マップ上にあるイベントが存在する場合、
- そのイベントとの距離に応じて、
- 音量を自動で変えるBGS演奏機能を実装するスクリプトです。
- イベントに近づけば音も大きくなり、
- 逆に遠ざかれば音も小さくなります。
- イベントごとに音の届く距離、演奏するBGSを設定できます。
- 滝や噴水、砂浜やソナーなどの演出に使えます。
- 複数の候補イベントがある場合は最も近いイベントのものを参照します。
- 設定にはイベントの名前に 環境 の文字を含ませてください。
- (環境噴水 など)
- ただし、イベントコマンドなどで
- 何らかのBGSが演奏されている場合はそちらが優先されます。
- 設定はソース内部で行ってください。
- =end
- #==============================================================================
- # ☆ MINTO
- #------------------------------------------------------------------------------
- # 様々なフラグを扱うメインモジュールです。
- #==============================================================================
- module MINTO
-
- # BGS自動演奏スクリプトを有効化 ( true で有効 / false で無効 )
- RGSS["Auto_BGS"] = true
- end
- # BGS自動演奏スクリプトが有効な場合に以降の処理を実行する
- if MINTO::RGSS["Auto_BGS"] == true then
-
- #==============================================================================
- # ☆ Auto_BGS_Pass
- #------------------------------------------------------------------------------
- # 指定ポイントからプレイヤーの相対距離を算出して、
- # 自動的に指定BGSの音量を変化させるモジュールです。
- #==============================================================================
- module Auto_BGS_Pass
- #--------------------------------------------------------------------------
- # ● データの設定
- # name : イベント名
- # id : イベントID
- #--------------------------------------------------------------------------
- def self.set_data(name, id)
- # イベント名に応じて分岐
- case name
- when "環境噴水" then
- # イベントID(変更しない), 音の届く距離, 演奏するBGS名
- # 1マスの距離が32です。
- @data = [id, 640, "River"]
- when "環境浜" then
- # イベントID(変更しない), 音の届く距離, 演奏するBGS名
- # 1マスの距離が32です。
- @data = [id, 3000, "Sea"]
- end
- end
- #--------------------------------------------------------------------------
- # ● データの取得
- #--------------------------------------------------------------------------
- def self.data
- return @data
- end
- #--------------------------------------------------------------------------
- # ● データのクリア
- #--------------------------------------------------------------------------
- def self.clear
- @data = nil
- @x = nil
- @y = nil
- end
- #--------------------------------------------------------------------------
- # ● 最終相対距離の取得
- #--------------------------------------------------------------------------
- def self.last_distance
- return @last_distance
- end
- #--------------------------------------------------------------------------
- # ● 最終相対距離の変更
- # n : 相対距離
- #--------------------------------------------------------------------------
- def self.last_distance=(n)
- @last_distance = n
- end
- #--------------------------------------------------------------------------
- # ● 相対距離算定
- # id : イベントID
- #--------------------------------------------------------------------------
- def self.distance(id)
- # イベントを取得
- @event = $game_map.events[id]
- # 距離の絶対値を取得
- distance_x = (@event.screen_x - $game_player.screen_x).abs
- distance_y = (@event.screen_y - $game_player.screen_y).abs
- # 互いの距離から相対距離を返す
- return distance_x + distance_y
- end
- #--------------------------------------------------------------------------
- # ● 音量の取得
- # data : イベントデータ
- #--------------------------------------------------------------------------
- def self.get_volume(data)
- # 相対距離より音量を算出
- return (data[1] - self.distance(data[0])).rate(data[1])
- end
- #--------------------------------------------------------------------------
- # ● フレーム更新
- #--------------------------------------------------------------------------
- def self.update
- # イベントなどで何らかのBGSを演奏中の場合
- if RPG::BGS.last.name != "" then
- # メソッドを返す
- return
- end
- # 無効なデータの場合
- if @data == nil then
- # メソッドを返す
- return
- end
- # 無効なイベントの場合
- if $game_map.events[@data[0]] == nil then
- # データをクリア
- self.clear
- # メソッドを返す
- return
- end
- # 環境イベントでない場合
- if not $game_map.events[@data[0]].event.name.include?("環境") then
- # データをクリア
- self.clear
- # メソッドを返す
- return
- end
- # プレイヤーの位置を取得
- x = $game_player.x
- y = $game_player.y
- # 動いていない場合
- if @x == x and @y == y then
- # メソッドを返す
- return
- end
- # 最終座標を更新
- @x = x
- @y = y
- # 相対距離より音量を算出
- volume = [self.get_volume(@data), 0].max
- # BGSを演奏
- Audio.bgs_play("Audio/BGS/#{@data[2]}", volume)
- # BGSが更新された場合
- if @last_bgs != @data[2] then
- # 最終BGS名を更新
- @last_bgs = @data[2].dup
- # 極端な処理落ちを防止する
- Graphics.frame_reset
- end
- end
- end
- #==============================================================================
- # ☆ MINTO_Scene_Map_02
- #------------------------------------------------------------------------------
- # マップ画面を強化するモジュールです。
- #==============================================================================
- module MINTO_Scene_Map_02
- #--------------------------------------------------------------------------
- # ● 開始処理
- #--------------------------------------------------------------------------
- def start
- # BGSモジュールのデータをクリア
- Auto_BGS_Pass.clear
- # 継承先の処理に移行
- super
- end
- #--------------------------------------------------------------------------
- # ● 終了処理
- #--------------------------------------------------------------------------
- def terminate
- # BGSモジュールのデータをクリア
- Auto_BGS_Pass.clear
- # BGS設定中でない場合
- if RPG::BGS.last.name == "" then
- # BGSを解放
- Audio.bgs_stop
- end
- # 継承先の処理に移行
- super
- end
- #--------------------------------------------------------------------------
- # ● フレーム更新
- #--------------------------------------------------------------------------
- def update
- # BGSモジュールを更新
- Auto_BGS_Pass.update
- # 継承先の処理に移行
- super
- end
- end
- #==============================================================================
- # ■ Game_Map
- #------------------------------------------------------------------------------
- # マップを扱うクラスです。スクロールや通行可能判定などの機能を持っています。
- # このクラスのインスタンスは $game_map で参照されます。
- #==============================================================================
- class Game_Map
- #--------------------------------------------------------------------------
- # ● フレーム更新
- # 使用エイリアス : update_MINTO_Auto_BGS
- #--------------------------------------------------------------------------
- alias :update_MINTO_Auto_BGS :update
- def update
- # 最終相対距離をクリア
- Auto_BGS_Pass.last_distance = nil
- # 元の処理を実行
- update_MINTO_Auto_BGS
- end
- end
- #==============================================================================
- # ■ Game_Event
- #------------------------------------------------------------------------------
- # イベントを扱うクラスです。条件判定によるイベントページ切り替えや、並列処理
- # イベント実行などの機能を持っており、Game_Map クラスの内部で使用されます。
- #==============================================================================
- class Game_Event < Game_Character
- #--------------------------------------------------------------------------
- # ● 公開インスタンス変数
- #--------------------------------------------------------------------------
- attr_reader :event # イベント
- #--------------------------------------------------------------------------
- # ● フレーム更新
- # 使用エイリアス : update_MINTO_Auto_BGS
- #--------------------------------------------------------------------------
- alias :update_MINTO_Auto_BGS :update
- def update
- # イベント名に 環境 が含まれる場合
- if @event.name.include?("環境") == true then
- # イベントとの相対距離を取得
- distance = Auto_BGS_Pass.distance(@event.id)
- # 最終相対距離が無効な場合
- if Auto_BGS_Pass.last_distance == nil then
- # 最終相対距離を更新
- Auto_BGS_Pass.last_distance = distance
- # 自動演奏データを変更
- Auto_BGS_Pass.set_data(@event.name, @event.id)
- # 最終相対距離よりも近づいた場合
- elsif distance <= Auto_BGS_Pass.last_distance then
- # 最終相対距離を更新
- Auto_BGS_Pass.last_distance = distance
- # 自動演奏データを変更
- Auto_BGS_Pass.set_data(@event.name, @event.id)
- end
- end
- # 元の処理を実行
- update_MINTO_Auto_BGS
- end
- end
- #==============================================================================
- # ■ Game_Interpreter
- #------------------------------------------------------------------------------
- # イベントコマンドを実行するインタプリタです。このクラスは Game_Map クラス、
- # Game_Troop クラス、Game_Event クラスの内部で使用されます。
- #==============================================================================
- class Game_Interpreter
- #--------------------------------------------------------------------------
- # ● 場所移動
- # 使用エイリアス : command_201_MINTO_Auto_BGS
- #--------------------------------------------------------------------------
- alias :command_201_MINTO_Auto_BGS :command_201
- def command_201
- # BGSモジュールのデータをクリア
- Auto_BGS_Pass.clear
- # BGS設定中でない場合
- if RPG::BGS.last.name == "" then
- # BGSを解放
- Audio.bgs_stop
- end
- # 元の処理を実行
- return command_201_MINTO_Auto_BGS
- end
- end
- #==============================================================================
- # ■ Scene_Map
- #------------------------------------------------------------------------------
- # マップ画面の処理を行うクラスです。
- #==============================================================================
- class Scene_Map < Scene_Base
- #--------------------------------------------------------------------------
- # ● システムインクルード
- #--------------------------------------------------------------------------
- include(MINTO_Scene_Map_02)
- end
- end
复制代码
方法:如果是喷水池之类.建立一个空白事件.把事件命名为"環境噴水"就能自动产生效果.当然如果是喷泉.记得设定事件的画面.
如果是瀑布.海滩.建立一个空白事件.命名为"環境浜".效果同上.两个事件都只要取名.不必在页面内设定任何内容.
要改动的话.改脚本的这里.可以设定事件的演奏音乐:
def self.set_data(name, id)
# イベント名に応じて分岐
case name
when "環境噴水" then
# イベントID(変更しない), 音の届く距離, 演奏するBGS名
# 1マスの距離が32です。
@data = [id, 640, "River"]
when "環境浜" then
# イベントID(変更しない), 音の届く距離, 演奏するBGS名
# 1マスの距離が32です。
@data = [id, 3000, "Sea"]
end
end
效果就是如你说的.靠近就有声音.远离就逐渐消失. |
|