设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
12
返回列表 发新帖
楼主: 夏季冰川
打印 上一主题 下一主题

[已经解决] 关于事件喷泉的杂音问题

 关闭 [复制链接]

Lv3.寻梦者

梦石
0
星屑
1733
在线时间
484 小时
注册时间
2006-1-7
帖子
1073
11
发表于 2009-9-17 17:18:03 | 只看该作者
我那个附件,用你的工程,替换一下DATA文件夹就可以了。

不过还是看看后知后觉的吧。
我的那个FPS也很低
初从文,三年不中;后习武,校场发一矢,中鼓吏,逐之出;遂学医,有所成。自撰一良方,服之,卒。
回复

使用道具 举报

Lv1.梦旅人

~琉璃の雪~<

梦石
0
星屑
49
在线时间
36 小时
注册时间
2008-11-6
帖子
3678
12
 楼主| 发表于 2009-9-18 01:08:33 | 只看该作者
本帖最后由 夏季冰川 于 2009-9-18 12:09 编辑

嗯,谢谢,不过我不懂你们为什么能达到修正FPS的效果?(尤其是
后知后觉的那个脚本,实在看不太懂).
~现在开始自绘头像~
回复

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
6645
在线时间
1666 小时
注册时间
2008-10-29
帖子
6710

贵宾

13
发表于 2009-9-18 09:07:47 | 只看该作者
其实就那样从效率上说还不是最好的
把那些东西写在脚本编辑器里 定义一个新的模块
然后事件脚本直接调用模块方法.这样比较好.
把那些条件分歧在脚本里用 if~elsif~elsif~end.
但是事件里那些条件分歧的顺序要倒过来
这样来写的话运行一次事件就不会对那个全局变量赋值那么多次
你那个工程里反反复复的在执行播放.要是地图描绘大一些,再多几个事件,那就会卡了
而我改的最后那个脚本,只有在那2个全局变量不相等的时候才会播放一次











你知道得太多了

回复

使用道具 举报

Lv1.梦旅人

~琉璃の雪~<

梦石
0
星屑
49
在线时间
36 小时
注册时间
2008-11-6
帖子
3678
14
 楼主| 发表于 2009-9-18 12:06:20 | 只看该作者
嗯,谢谢,懂了.
那也就是说如果我在与喷泉同一个距离时移动的时
候因为$yly=$yl所以不更变BGS的,自己想了下,感
觉脚本还真是强大,不然我用事件只能做到那种程度
了.
~现在开始自绘头像~
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
34 小时
注册时间
2006-6-19
帖子
111
15
发表于 2009-9-28 14:48:51 | 只看该作者
  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
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-5-11 04:55

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表