赞 | 0 |
VIP | 1 |
好人卡 | 0 |
积分 | 1 |
经验 | 3102 |
最后登录 | 2015-8-12 |
在线时间 | 34 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 50
- 在线时间
- 34 小时
- 注册时间
- 2006-6-19
- 帖子
- 111
|
- #◆◇◆◇◆ BGS自動演奏スクリプト ver 1.03 ◇◆◇◆◇
- # 全マスタースクリプト共通スクリプト
- # サポート掲示板 http://www2.ezbbs.net/21/minto-aaa/
- # by みんと
- =begin
- ■ 更新履歴
- ● ver 1.03(2008/08/26)
- イベントの一時消去に対応。
- ● ver 1.02(2008/05/05)
- 一度でもイベントなどでBGSを演奏した場合、
- 機能しなくなるミスを修正。
- ● ver 1.01(2008/04/18)
- 内部処理を若干、軽処理化。
- ■ 説明
- マップ上にあるイベントが存在する場合、
- そのイベントとの距離に応じて、
- 音量を自動で変えるBGS演奏機能を実装するスクリプトです。
- イベントに近づけば音も大きくなり、
- 逆に遠ざかれば音も小さくなります。
- イベントごとに音の届く距離、演奏するBGSを設定できます。
- 滝や噴水、砂浜やソナーなどの演出に使えます。
- 複数の候補イベントがある場合は最も近いイベントのものを参照します。
- 設定にはイベントの名前に 環境 の文字を含ませてください。
- (環境噴水 など)
- ただし、イベントコマンドで
- 何らかのBGSが演奏されている場合はそちらが優先されます。
- 設定はソース内部で行ってください。
- =end
- #==============================================================================
- # ☆ MINTO
- #------------------------------------------------------------------------------
- # 様々なフラグを扱うメインモジュールです。
- #==============================================================================
- module MINTO
-
- # BGS自動演奏スクリプトを有効化 ( true で有効 / false で無効 )
- RGSS["Real_BGS"] = true
- end
- # BGS自動演奏スクリプトが有効な場合に以降の処理を実行する
- if MINTO::RGSS["Real_BGS"] == true then
-
- #==============================================================================
- # ☆ Real_BGS_Pass
- #------------------------------------------------------------------------------
- # 指定ポイントからプレイヤーの相対距離を算出して、
- # 自動的に指定BGSの音量を変化させるモジュールです。
- #==============================================================================
- module Real_BGS_Pass
- #--------------------------------------------------------------------------
- # ● データの設定
- # name : イベント名
- # id : イベントID
- #--------------------------------------------------------------------------
- def self.set_data(name, id)
- # イベント名に応じて分岐
- case name
- when "環境_噴水" then
- # イベントID(変更しない), 音の届く距離, 演奏するBGS名
- # 1マスの距離が32です。
- @data = [id, 640, "010-River01"]
- when "環境_滝" then
- # イベントID(変更しない), 音の届く距離, 演奏するBGS名
- # 1マスの距離が32です。
- @data = [id, 3000, "012-Waterfall02"]
- 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 $game_system.playing_bgs.to_s != "" then
- # メソッドを返す
- return
- end
- # 無効なデータの場合
- if @data == nil then
- # メソッドを返す
- return
- end
- # 一時消去中のイベントの場合
- if $game_map.events[@data[0]].erased == true then
- # BGSを解放
- Audio.bgs_stop
- # データをクリア
- 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
- #==============================================================================
- # ■ Game_System
- #------------------------------------------------------------------------------
- # システム周りのデータを扱うクラスです。BGM などの管理も行います。このクラス
- # のインスタンスは $game_system で参照されます。
- #==============================================================================
- class Game_System
- #--------------------------------------------------------------------------
- # ● 公開インスタンス変数
- #--------------------------------------------------------------------------
- attr_reader :playing_bgs # 最終BGS
- #--------------------------------------------------------------------------
- # ● BGS の演奏
- # bgs : 演奏する BGS
- #--------------------------------------------------------------------------
- def bgs_play(bgs)
- # BGS名を記憶
- @playing_bgs = bgs
- # 指定されたBGSが有効で、且つタイトルが設定されている場合
- if bgs != nil and bgs.name != ""
- # BGSを演奏
- Audio.bgs_play("Audio/BGS/" + bgs.name, bgs.volume, bgs.pitch)
- # 指定されたBGSが無効、又はタイトルが設定されていない場合
- else
- # 記憶しているBGS名をクリア
- @playing_bgs = nil
- # BGSを停止
- Audio.bgs_stop
- end
- # 極端な処理落ちを防止
- Graphics.frame_reset
- end
- end
- #==============================================================================
- # ■ Game_Map
- #------------------------------------------------------------------------------
- # マップを扱うクラスです。スクロールや通行可能判定などの機能を持っています。
- # このクラスのインスタンスは $game_map で参照されます。
- #==============================================================================
- class Game_Map
- #--------------------------------------------------------------------------
- # ● フレーム更新
- # 使用エイリアス : update_MINTO_Real_BGS
- #--------------------------------------------------------------------------
- alias :update_MINTO_Real_BGS :update
- def update
- # 最終相対距離をクリア
- Real_BGS_Pass.last_distance = nil
- # 元の処理を実行
- update_MINTO_Real_BGS
- end
- end
- #==============================================================================
- # ■ Game_Event
- #------------------------------------------------------------------------------
- # イベントを扱うクラスです。条件判定によるイベントページ切り替えや、並列処理
- # イベント実行などの機能を持っており、Game_Map クラスの内部で使用されます。
- #==============================================================================
- class Game_Event < Game_Character
- #--------------------------------------------------------------------------
- # ● 公開インスタンス変数
- #--------------------------------------------------------------------------
- attr_reader :erased # 一時消去フラグ
- #--------------------------------------------------------------------------
- # ● フレーム更新
- # 使用エイリアス : update_MINTO_Real_BGS
- #--------------------------------------------------------------------------
- alias :update_MINTO_Real_BGS :update
- def update
- # イベント名に 環境 が含まれる場合
- if @event.name.include?("環境") == true then
- # イベントとの相対距離を取得
- distance = Real_BGS_Pass.distance(@event.id)
- # 最終相対距離が無効な場合
- if Real_BGS_Pass.last_distance == nil then
- # 最終相対距離を更新
- Real_BGS_Pass.last_distance = distance
- # 自動演奏データを変更
- Real_BGS_Pass.set_data(@event.name, @event.id)
- # 最終相対距離よりも近づいた場合
- elsif distance <= Real_BGS_Pass.last_distance then
- # 最終相対距離を更新
- Real_BGS_Pass.last_distance = distance
- # 自動演奏データを変更
- Real_BGS_Pass.set_data(@event.name, @event.id)
- end
- end
- # 元の処理を実行
- update_MINTO_Real_BGS
- end
- end
- #==============================================================================
- # ■ Interpreter (分割定義 5)
- #------------------------------------------------------------------------------
- # イベントコマンドを実行するインタプリタです。このクラスは Game_System クラ
- # スや Game_Event クラスの内部で使用されます。
- #==============================================================================
- class Interpreter
- #--------------------------------------------------------------------------
- # ● 場所移動
- # 使用エイリアス : command_201_MINTO_Real_BGS
- #--------------------------------------------------------------------------
- alias :command_201_MINTO_Real_BGS :command_201
- def command_201
- # BGSモジュールのデータをクリア
- Real_BGS_Pass.clear
- # BGS設定中でない場合
- if $game_system.playing_bgs.to_s == "" then
- # BGSを解放
- Audio.bgs_stop
- end
- # 元の処理を実行
- command_201_MINTO_Real_BGS
- end
- end
- #==============================================================================
- # ■ Scene_Map
- #------------------------------------------------------------------------------
- # マップ画面の処理を行うクラスです。
- #==============================================================================
- class Scene_Map
- #--------------------------------------------------------------------------
- # ● メイン処理
- # 使用エイリアス : main_MINTO_Real_BGS
- #--------------------------------------------------------------------------
- alias :main_MINTO_Real_BGS :main
- def main
- # BGSモジュールのデータをクリア
- Real_BGS_Pass.clear
- # 元の処理を実行
- main_MINTO_Real_BGS
- # BGSモジュールのデータをクリア
- Real_BGS_Pass.clear
- # BGS設定中でない場合
- if $game_system.playing_bgs.to_s == "" then
- # BGSを解放
- Audio.bgs_stop
- end
- end
- #--------------------------------------------------------------------------
- # ● フレーム更新
- # 使用エイリアス : update_MINTO_Real_BGS
- #--------------------------------------------------------------------------
- alias :update_MINTO_Real_BGS :update
- def update
- # BGSモジュールを更新
- Real_BGS_Pass.update
- # 元の処理を実行
- update_MINTO_Real_BGS
- end
- end
- end
复制代码 刚在日站上看到的感觉对你有用
原连接http://mintoroom.web.infoseek.co.jp/RGSS_51.html |
|