Project1

标题: 关于事件喷泉的杂音问题 [打印本页]

作者: 夏季冰川    时间: 2009-9-16 12:36
标题: 关于事件喷泉的杂音问题
本帖最后由 夏季冰川 于 2009-9-16 12:37 编辑

以下是一个自制的喷泉事件,目的是喷泉时的声音大小与主角和喷泉
的距离有关,但是不知道为什么会有连续不断的杂音出现,请问有什
么解决办法吗?

工程:(并行事件在左上角)
喷泉事件.rar (187.96 KB, 下载次数: 126)
作者: 后知后觉    时间: 2009-9-16 12:36
本帖最后由 后知后觉 于 2009-9-17 17:13 编辑

脚本是很伟大滴,它无处不在^ ^
顺便帮你把FPS也修正了~
喷泉事件.rar (331.12 KB, 下载次数: 136)
作者: 白鬼    时间: 2009-9-16 13:14
本帖最后由 白鬼 于 2009-9-16 13:33 编辑

请用音量控制,而不是用播放BGS
因为你设置的那个并行处理的事件没有结束,它会一直运转,意思是,它一直在播放,播放,播放,而不是播放,等待播放完毕,再播放。
这个杂音,就是音频开头的那个声音,不停的重复不停的重复导致的。
你可以搜索一下全局音量控制,播放了BGS之后,用音量来控制,而不要用播放来控制。
【附件已经上传,大致做到了这个效果。不过一来效果不明显;二来由于不停的在记忆/还原BGS,导致FPS不高;三来刚开始游戏就播放的音量是100,必须是一百,因为调整的基础是这个100,所以刚开始会听到100%的一声,然后突然变小。这个我是解决不了啦;四来我用了独立开关,但是除非你这个场景只用到一次,否则还是想别的办法来切换,事件页吧】

Data.rar

40.14 KB, 下载次数: 86


作者: 白鬼    时间: 2009-9-16 13:33
请用音量控制,而不是用播放BGS
因为你设置的那个并行处理的事件没有结束,它会一直运转,意思是,它一直在播放,播放,播放,而不是播放,等待播放完毕,再播放。
这个杂音,就是音频开头的那个声音,不停的重复不停的重复导致的。
你可以搜索一下全局音量控制,播放了BGS之后,用音量来控制,而不要用播放来控制。
【附件已经上传,大致做到了这个效果。不过一来效果不明显;二来由于不停的在记忆/还原BGS,导致FPS不高;三来刚开始游戏就播放的音量是100,必须是一百,因为调整的基础是这个100,所以刚开始会听到100%的一声,然后突然变小。这个我是解决不了啦;四来我用了独立开关,但是除非你这个场景只用到一次,否则还是想别的办法来切换,事件页吧】

Data.rar

40.14 KB, 下载次数: 92


作者: 夏季冰川    时间: 2009-9-17 11:54
你那个附件怎么没有工程?
作者: 传说中di    时间: 2009-9-17 12:15
是你用的声音不对。。。
换个声音试试
作者: 夏季冰川    时间: 2009-9-17 12:39
换另外一个声音也是一样的.
作者: 传说中di    时间: 2009-9-17 12:44
下听听

喷泉事件.rar

188 KB, 下载次数: 103


作者: 夏季冰川    时间: 2009-9-17 13:00
只能用那个音乐吗?看来无法使用连贯的水声作音乐了.
作者: 传说中di    时间: 2009-9-17 13:07
那是声音的问题!!你可以去网上下载个你想要的声音。。你用的那个声音是下雨的声音
作者: 白鬼    时间: 2009-9-17 17:18
我那个附件,用你的工程,替换一下DATA文件夹就可以了。

不过还是看看后知后觉的吧。
我的那个FPS也很低
作者: 夏季冰川    时间: 2009-9-18 01:08
本帖最后由 夏季冰川 于 2009-9-18 12:09 编辑

嗯,谢谢,不过我不懂你们为什么能达到修正FPS的效果?(尤其是
后知后觉的那个脚本,实在看不太懂).
作者: 后知后觉    时间: 2009-9-18 09:07
其实就那样从效率上说还不是最好的
把那些东西写在脚本编辑器里 定义一个新的模块
然后事件脚本直接调用模块方法.这样比较好.
把那些条件分歧在脚本里用 if~elsif~elsif~end.
但是事件里那些条件分歧的顺序要倒过来
这样来写的话运行一次事件就不会对那个全局变量赋值那么多次
你那个工程里反反复复的在执行播放.要是地图描绘大一些,再多几个事件,那就会卡了
而我改的最后那个脚本,只有在那2个全局变量不相等的时候才会播放一次
作者: 夏季冰川    时间: 2009-9-18 12:06
嗯,谢谢,懂了.
那也就是说如果我在与喷泉同一个距离时移动的时
候因为$yly=$yl所以不更变BGS的,自己想了下,感
觉脚本还真是强大,不然我用事件只能做到那种程度
了.
作者: waya    时间: 2009-9-28 14:48
  1. #◆◇◆◇◆  BGS自動演奏スクリプト ver 1.03  ◇◆◇◆◇
  2. # 全マスタースクリプト共通スクリプト
  3. #  サポート掲示板 http://www2.ezbbs.net/21/minto-aaa/
  4. #   by みんと

  5. =begin

  6. ■ 更新履歴

  7. ● ver 1.03(2008/08/26)
  8. イベントの一時消去に対応。

  9. ● ver 1.02(2008/05/05)
  10. 一度でもイベントなどでBGSを演奏した場合、
  11. 機能しなくなるミスを修正。

  12. ● ver 1.01(2008/04/18)
  13. 内部処理を若干、軽処理化。

  14. ■ 説明

  15. マップ上にあるイベントが存在する場合、
  16. そのイベントとの距離に応じて、
  17. 音量を自動で変えるBGS演奏機能を実装するスクリプトです。
  18. イベントに近づけば音も大きくなり、
  19. 逆に遠ざかれば音も小さくなります。

  20. イベントごとに音の届く距離、演奏するBGSを設定できます。
  21. 滝や噴水、砂浜やソナーなどの演出に使えます。
  22. 複数の候補イベントがある場合は最も近いイベントのものを参照します。

  23. 設定にはイベントの名前に 環境 の文字を含ませてください。
  24. (環境噴水 など)

  25. ただし、イベントコマンドで
  26. 何らかのBGSが演奏されている場合はそちらが優先されます。
  27. 設定はソース内部で行ってください。

  28. =end

  29. #==============================================================================
  30. # ☆ MINTO
  31. #------------------------------------------------------------------------------
  32. #   様々なフラグを扱うメインモジュールです。
  33. #==============================================================================

  34. module MINTO
  35.   
  36.   # BGS自動演奏スクリプトを有効化 ( true で有効 / false で無効 )
  37.   RGSS["Real_BGS"] = true

  38. end

  39. # BGS自動演奏スクリプトが有効な場合に以降の処理を実行する

  40. if MINTO::RGSS["Real_BGS"] == true then
  41.   
  42. #==============================================================================
  43. # ☆ Real_BGS_Pass
  44. #------------------------------------------------------------------------------
  45. #   指定ポイントからプレイヤーの相対距離を算出して、
  46. #   自動的に指定BGSの音量を変化させるモジュールです。
  47. #==============================================================================

  48. module Real_BGS_Pass
  49.   #--------------------------------------------------------------------------
  50.   # ● データの設定
  51.   #    name : イベント名
  52.   #    id   : イベントID
  53.   #--------------------------------------------------------------------------
  54.   def self.set_data(name, id)
  55.     # イベント名に応じて分岐
  56.     case name
  57.     when "環境_噴水" then
  58.       # イベントID(変更しない), 音の届く距離, 演奏するBGS名
  59.       # 1マスの距離が32です。
  60.       @data = [id, 640, "010-River01"]
  61.     when "環境_滝" then
  62.       # イベントID(変更しない), 音の届く距離, 演奏するBGS名
  63.       # 1マスの距離が32です。
  64.       @data = [id, 3000, "012-Waterfall02"]
  65.     end
  66.   end
  67.   #--------------------------------------------------------------------------
  68.   # ● データの取得
  69.   #--------------------------------------------------------------------------
  70.   def self.data
  71.     return @data
  72.   end
  73.   #--------------------------------------------------------------------------
  74.   # ● データのクリア
  75.   #--------------------------------------------------------------------------
  76.   def self.clear
  77.     @data = nil
  78.     @x = nil
  79.     @y = nil
  80.   end
  81.   #--------------------------------------------------------------------------
  82.   # ● 最終相対距離の取得
  83.   #--------------------------------------------------------------------------
  84.   def self.last_distance
  85.     return @last_distance
  86.   end
  87.   #--------------------------------------------------------------------------
  88.   # ● 最終相対距離の変更
  89.   #    n : 相対距離
  90.   #--------------------------------------------------------------------------
  91.   def self.last_distance=(n)
  92.     @last_distance = n
  93.   end
  94.   #--------------------------------------------------------------------------
  95.   # ● 相対距離算定
  96.   #    id : イベントID
  97.   #--------------------------------------------------------------------------
  98.   def self.distance(id)
  99.     # イベントを取得
  100.     @event = $game_map.events[id]
  101.     # 距離の絶対値を取得
  102.     distance_x = (@event.screen_x - $game_player.screen_x).abs
  103.     distance_y = (@event.screen_y - $game_player.screen_y).abs
  104.     # 互いの距離から相対距離を返す
  105.     return distance_x + distance_y
  106.   end
  107.   #--------------------------------------------------------------------------
  108.   # ● 音量の取得
  109.   #    data : イベントデータ
  110.   #--------------------------------------------------------------------------
  111.   def self.get_volume(data)
  112.     # 相対距離より音量を算出
  113.     return (data[1] - self.distance(data[0])).rate(data[1])
  114.   end
  115.   #--------------------------------------------------------------------------
  116.   # ● フレーム更新
  117.   #--------------------------------------------------------------------------
  118.   def self.update
  119.     # イベントなどで何らかのBGSを演奏中の場合
  120.     if $game_system.playing_bgs.to_s != "" then
  121.       # メソッドを返す
  122.       return
  123.     end
  124.     # 無効なデータの場合
  125.     if @data == nil then
  126.       # メソッドを返す
  127.       return
  128.     end
  129.     # 一時消去中のイベントの場合
  130.     if $game_map.events[@data[0]].erased == true then
  131.       # BGSを解放
  132.       Audio.bgs_stop
  133.       # データをクリア
  134.       self.clear
  135.       # メソッドを返す
  136.       return
  137.     end
  138.     # プレイヤーの位置を取得
  139.     x = $game_player.x
  140.     y = $game_player.y
  141.     # 動いていない場合
  142.     if @x == x and @y == y then
  143.       # メソッドを返す
  144.       return
  145.     end
  146.     # 最終座標を更新
  147.     @x = x
  148.     @y = y
  149.     # 相対距離より音量を算出
  150.     volume = [self.get_volume(@data), 0].max
  151.     # BGSを演奏
  152.     Audio.bgs_play("Audio/BGS/#{@data[2]}", volume)
  153.     # BGSが更新された場合
  154.     if @last_bgs != @data[2] then
  155.       # 最終BGS名を更新
  156.       @last_bgs = @data[2].dup
  157.       # 極端な処理落ちを防止する
  158.       Graphics.frame_reset
  159.     end
  160.   end
  161. end
  162. #==============================================================================
  163. # ■ Game_System
  164. #------------------------------------------------------------------------------
  165. #  システム周りのデータを扱うクラスです。BGM などの管理も行います。このクラス
  166. # のインスタンスは $game_system で参照されます。
  167. #==============================================================================

  168. class Game_System
  169.   #--------------------------------------------------------------------------
  170.   # ● 公開インスタンス変数
  171.   #--------------------------------------------------------------------------
  172.   attr_reader   :playing_bgs              # 最終BGS
  173.   #--------------------------------------------------------------------------
  174.   # ● BGS の演奏
  175.   #     bgs : 演奏する BGS
  176.   #--------------------------------------------------------------------------
  177.   def bgs_play(bgs)
  178.     # BGS名を記憶
  179.     @playing_bgs = bgs
  180.     # 指定されたBGSが有効で、且つタイトルが設定されている場合
  181.     if bgs != nil and bgs.name != ""
  182.       # BGSを演奏
  183.       Audio.bgs_play("Audio/BGS/" + bgs.name, bgs.volume, bgs.pitch)
  184.     # 指定されたBGSが無効、又はタイトルが設定されていない場合
  185.     else
  186.       # 記憶しているBGS名をクリア
  187.       @playing_bgs = nil
  188.       # BGSを停止
  189.       Audio.bgs_stop
  190.     end
  191.     # 極端な処理落ちを防止
  192.     Graphics.frame_reset
  193.   end
  194. end
  195. #==============================================================================
  196. # ■ Game_Map
  197. #------------------------------------------------------------------------------
  198. #  マップを扱うクラスです。スクロールや通行可能判定などの機能を持っています。
  199. # このクラスのインスタンスは $game_map で参照されます。
  200. #==============================================================================

  201. class Game_Map
  202.   #--------------------------------------------------------------------------
  203.   # ● フレーム更新
  204.   #    使用エイリアス : update_MINTO_Real_BGS
  205.   #--------------------------------------------------------------------------
  206.   alias :update_MINTO_Real_BGS :update
  207.   def update
  208.     # 最終相対距離をクリア
  209.     Real_BGS_Pass.last_distance = nil
  210.     # 元の処理を実行
  211.     update_MINTO_Real_BGS
  212.   end
  213. end
  214. #==============================================================================
  215. # ■ Game_Event
  216. #------------------------------------------------------------------------------
  217. #  イベントを扱うクラスです。条件判定によるイベントページ切り替えや、並列処理
  218. # イベント実行などの機能を持っており、Game_Map クラスの内部で使用されます。
  219. #==============================================================================

  220. class Game_Event < Game_Character
  221.   #--------------------------------------------------------------------------
  222.   # ● 公開インスタンス変数
  223.   #--------------------------------------------------------------------------
  224.   attr_reader   :erased                   # 一時消去フラグ
  225.   #--------------------------------------------------------------------------
  226.   # ● フレーム更新
  227.   #    使用エイリアス : update_MINTO_Real_BGS
  228.   #--------------------------------------------------------------------------
  229.   alias :update_MINTO_Real_BGS :update
  230.   def update
  231.     # イベント名に 環境 が含まれる場合
  232.     if @event.name.include?("環境") == true then
  233.       # イベントとの相対距離を取得
  234.       distance = Real_BGS_Pass.distance(@event.id)
  235.       # 最終相対距離が無効な場合
  236.       if Real_BGS_Pass.last_distance == nil then
  237.         # 最終相対距離を更新
  238.         Real_BGS_Pass.last_distance = distance
  239.         # 自動演奏データを変更
  240.         Real_BGS_Pass.set_data(@event.name, @event.id)
  241.       # 最終相対距離よりも近づいた場合
  242.       elsif distance <= Real_BGS_Pass.last_distance then
  243.         # 最終相対距離を更新
  244.         Real_BGS_Pass.last_distance = distance
  245.         # 自動演奏データを変更
  246.         Real_BGS_Pass.set_data(@event.name, @event.id)
  247.       end
  248.     end
  249.     # 元の処理を実行
  250.     update_MINTO_Real_BGS
  251.   end
  252. end
  253. #==============================================================================
  254. # ■ Interpreter (分割定義 5)
  255. #------------------------------------------------------------------------------
  256. #  イベントコマンドを実行するインタプリタです。このクラスは Game_System クラ
  257. # スや Game_Event クラスの内部で使用されます。
  258. #==============================================================================

  259. class Interpreter
  260.   #--------------------------------------------------------------------------
  261.   # ● 場所移動
  262.   #    使用エイリアス : command_201_MINTO_Real_BGS
  263.   #--------------------------------------------------------------------------
  264.   alias :command_201_MINTO_Real_BGS :command_201
  265.   def command_201
  266.     # BGSモジュールのデータをクリア
  267.     Real_BGS_Pass.clear
  268.     # BGS設定中でない場合
  269.     if $game_system.playing_bgs.to_s == "" then
  270.       # BGSを解放
  271.       Audio.bgs_stop
  272.     end
  273.     # 元の処理を実行
  274.     command_201_MINTO_Real_BGS
  275.   end
  276. end
  277. #==============================================================================
  278. # ■ Scene_Map
  279. #------------------------------------------------------------------------------
  280. #  マップ画面の処理を行うクラスです。
  281. #==============================================================================

  282. class Scene_Map
  283.   #--------------------------------------------------------------------------
  284.   # ● メイン処理
  285.   #    使用エイリアス : main_MINTO_Real_BGS
  286.   #--------------------------------------------------------------------------
  287.   alias :main_MINTO_Real_BGS :main
  288.   def main
  289.     # BGSモジュールのデータをクリア
  290.     Real_BGS_Pass.clear
  291.     # 元の処理を実行
  292.     main_MINTO_Real_BGS
  293.     # BGSモジュールのデータをクリア
  294.     Real_BGS_Pass.clear
  295.     # BGS設定中でない場合
  296.     if $game_system.playing_bgs.to_s == "" then
  297.       # BGSを解放
  298.       Audio.bgs_stop
  299.     end
  300.   end
  301.   #--------------------------------------------------------------------------
  302.   # ● フレーム更新
  303.   #    使用エイリアス : update_MINTO_Real_BGS
  304.   #--------------------------------------------------------------------------
  305.   alias :update_MINTO_Real_BGS :update
  306.   def update
  307.     # BGSモジュールを更新
  308.     Real_BGS_Pass.update
  309.     # 元の処理を実行
  310.     update_MINTO_Real_BGS
  311.   end
  312. end

  313. end
复制代码
刚在日站上看到的感觉对你有用
原连接http://mintoroom.web.infoseek.co.jp/RGSS_51.html




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1