Project1

标题: 【RGSS3用】视野遮罩脚本V1.2 [打印本页]

作者: 李光兆    时间: 2015-9-19 16:26
标题: 【RGSS3用】视野遮罩脚本V1.2
本帖最后由 李光兆 于 2015-9-19 16:29 编辑

与V1.1相比,取消了关闭菜单和存档的一瞬间会取消视野遮罩的BUG,看6R貌似没有,就发出来好啦
RUBY 代码复制
  1. #==============================================================================
  2. # ★ RGSS3_視界制限 Ver1.2
  3. #==============================================================================
  4. =begin
  5.  
  6. 作者:tomoaky
  7. webサイト:ひきも記 ([url]http://hikimoki.sakura.ne.jp/[/url])
  8.  
  9. 設定した番号のマップだけ視界を制限します。
  10.  
  11. アクター、職業、武器(防具)、ステートなどのメモ欄にタグを書き込むことで
  12. 視界制限のサイズを補正することができます。
  13.   例)<視界補正 32>
  14. 視界が 32 ドット広がります。
  15. 視界補正値の計算をおこなうのは戦闘メンバーのみとなります。
  16.  
  17. ゲーム変数(初期設定では9番)を使って視界のサイズを補正できます。
  18.  
  19. 実際の視界制限サイズは上記の設定値をすべて加算したものになります。
  20. ただし、マップに視界制限値が設定されていない場合はすべて無効です。
  21.  
  22. プレイヤーの画面上の座標が常に変わるような状況(1画面分の小さなマップなど)、
  23. 視界補正値がリアルタイムに変化する状況などでは頻繁にスプライトの再描画を
  24. 実行するため処理が重くなります
  25.  
  26. 動作に必要な画像
  27.   Graphics/System/sight_shadow.png
  28.  
  29. 使用するゲーム変数(初期設定)
  30.   0009
  31.  
  32. 2013.01.22  Ver1.2
  33.   ・毎フレーム再描画をおこなっていた処理を改善
  34.   ・環境によってエラー落ちの原因となる部分を修正
  35.  
  36. 2012.03.07  Ver1.11
  37.  ・メニューから復帰したときに視界制限が途切れる不具合を修正
  38.  
  39. 2012.02.05  Ver1.1
  40.   ・タイマーが隠れてしまわないようにZ座標を調整
  41.   ・ゲーム変数を使って視界制限サイズを補正する機能を追加
  42.  
  43. 2012.01.20  Ver1.0
  44.   公開
  45.  
  46. =end
  47.  
  48. #==============================================================================
  49. # □ 設定項目
  50. #==============================================================================
  51. module TMBLSIGHT
  52.   # 何番のマップをどれだけ視界制限するか
  53.   # 例)SIGHT[3] = 128  # 3番のマップの視界を128ドット四方に制限する
  54.   SIGHT = {}
  55.   SIGHT[3] = 256
  56.  
  57.   VN_SIGHT = 9    # 視界のサイズ補正に利用するゲーム変数番号
  58. end
  59.  
  60. #==============================================================================
  61. # □ RPG::BaseItem
  62. #==============================================================================
  63. class RPG::BaseItem
  64.   #--------------------------------------------------------------------------
  65.   # ○ 視界制限の補正値
  66.   #--------------------------------------------------------------------------
  67.   def sight_power
  68.     unless @sight_power
  69.       @sight_power = /<視界補正\s*(\-*\d+)\s*>/ =~ @note ? $1.to_i : 0
  70.     end
  71.     @sight_power
  72.   end
  73. end
  74.  
  75. #==============================================================================
  76. # ■ Game_Actor
  77. #==============================================================================
  78. class Game_Actor
  79.   #--------------------------------------------------------------------------
  80.   # ○ 視界制限の補正値
  81.   #--------------------------------------------------------------------------
  82.   def sight_power
  83.     feature_objects.inject(0) {|result, object| result + object.sight_power }
  84.   end
  85. end
  86.  
  87. #==============================================================================
  88. # □ Sprite_SightShadow
  89. #==============================================================================
  90. class Sprite_SightShadow < Sprite
  91.   #--------------------------------------------------------------------------
  92.   # ● オブジェクト初期化
  93.   #--------------------------------------------------------------------------
  94.   def initialize(viewport = nil)
  95.     super(viewport)
  96.     self.z = 199
  97.     self.bitmap = Bitmap.new(Graphics.width, Graphics.height)
  98.     @bitmap_shadow = Bitmap.new("Graphics/System/sight_shadow")
  99.   end
  100.   #--------------------------------------------------------------------------
  101.   # ● 解放
  102.   #--------------------------------------------------------------------------
  103.   def dispose
  104.     self.bitmap.dispose
  105.     @bitmap_shadow.dispose
  106.     super
  107.   end
  108.   #--------------------------------------------------------------------------
  109.   # ● フレーム更新
  110.   #--------------------------------------------------------------------------
  111.   def update
  112.     super
  113.     if TMBLSIGHT::SIGHT[$game_map.map_id]
  114.       self.visible = true
  115.       w = TMBLSIGHT::SIGHT[$game_map.map_id]      # マップに設定された補正値
  116.       w += $game_variables[TMBLSIGHT::VN_SIGHT]   # ゲーム変数による補正値
  117.       $game_party.battle_members.each do |actor|
  118.         w = [w + actor.sight_power, 48].max       # 戦闘メンバーの補正値
  119.       end
  120.       x = $game_player.screen_x - w / 2
  121.       y = $game_player.screen_y - w / 2 - 16
  122.       if w != @last_w || x != @last_x || y != @last_y
  123.         @last_w = w
  124.         @last_x = x
  125.         @last_y = y
  126.         self.bitmap.clear
  127.         rect = Rect.new(x, y, w, w)
  128.         self.bitmap.stretch_blt(rect, @bitmap_shadow, @bitmap_shadow.rect)
  129.         color = Color.new(0, 0, 0)
  130.         self.bitmap.fill_rect(0, 0, Graphics.width, y, color)
  131.         self.bitmap.fill_rect(0, y + w, Graphics.width, Graphics.height - y - w, color)
  132.         self.bitmap.fill_rect(0, y, x, w, color)
  133.         self.bitmap.fill_rect(x + w, y, Graphics.width - x - w, w, color)
  134.       end
  135.     else
  136.       self.visible = false
  137.     end
  138.   end
  139. end
  140.  
  141. #==============================================================================
  142. # ■ Spriteset_Map
  143. #==============================================================================
  144. class Spriteset_Map
  145.   #--------------------------------------------------------------------------
  146.   # ● オブジェクト初期化
  147.   #--------------------------------------------------------------------------
  148.   alias tmblsight_spriteset_map_initialize initialize
  149.   def initialize
  150.     tmblsight_spriteset_map_initialize
  151.     create_sight_shadow
  152.   end
  153.   #--------------------------------------------------------------------------
  154.   # ○ 視界制限スプライトの作成
  155.   #--------------------------------------------------------------------------
  156.   def create_sight_shadow
  157.     @sight_shadow_sprite = Sprite_SightShadow.new(@viewport2)
  158.     update_sight_shadow
  159.   end
  160.   #--------------------------------------------------------------------------
  161.   # ● 解放
  162.   #--------------------------------------------------------------------------
  163.   alias tmblsight_spriteset_map_dispose dispose
  164.   def dispose
  165.     dispose_sight_shadow
  166.     tmblsight_spriteset_map_dispose
  167.   end
  168.   #--------------------------------------------------------------------------
  169.   # ○ 視界制限スプライトの解放
  170.   #--------------------------------------------------------------------------
  171.   def dispose_sight_shadow
  172.     @sight_shadow_sprite.dispose
  173.   end
  174.   #--------------------------------------------------------------------------
  175.   # ● フレーム更新
  176.   #--------------------------------------------------------------------------
  177.   alias tmblsight_spriteset_map_update update
  178.   def update
  179.     update_sight_shadow
  180.     tmblsight_spriteset_map_update
  181.   end
  182.   #--------------------------------------------------------------------------
  183.   # ○ 視界制限スプライトの更新
  184.   #--------------------------------------------------------------------------
  185.   def update_sight_shadow
  186.     @sight_shadow_sprite.update if @sight_shadow_sprite
  187.   end
  188. end

作者: 庆少秋风    时间: 2015-10-25 14:24
收下了谢谢楼主
作者: yang1zhi    时间: 2015-11-16 16:42
虽然不知道是什么,怎么用。先拿来再说
作者: lixinglixing022    时间: 2018-11-29 09:36
这个怎么用啊?





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