Project1

标题: 关于视觉限制的问题 [打印本页]

作者: asdxjp233    时间: 2017-1-1 10:57
标题: 关于视觉限制的问题
视觉限制怎么通过变量来选择视觉限制的地图
这个问题我没搞清楚 求指教
脚本如下
RUBY 代码复制
  1. #==============================================================================
  2. # ★ RGSS3_视界制限 Ver1.1
  3. #==============================================================================
  4. =begin
  5.  
  6. 作者:tomoaky
  7. 首发网站:ひきも记 ([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. 因为每帧都会重绘整个屏幕的Sprite
  23. 将会有所加重。
  24.  
  25. 操作所需的图像
  26.   Graphics/System/sight_shadow.png
  27.  
  28. 游戏变量使用(默认设置)
  29.   0009
  30.  
  31. 2012.02.05  Ver1.1
  32.   ・调整Z坐标使计时器使不被遮住
  33.   ・加使用游戏变量补正视野限制尺寸的功能(通过变量可做成开/関效果)
  34.  
  35. 2012.01.20  Ver1.0
  36.   公开
  37.  
  38. =end
  39.  
  40. #==============================================================================
  41. # □ 设定项目
  42. #==============================================================================
  43. module TMBLSIGHT
  44.   # 指定几号的地图进行视界制限
  45.   # 例)SIGHT[3] = 128  # 设置地图号码3的视野能见度128点矩形
  46.   SIGHT = {}
  47.   SIGHT[1] = 192
  48.  
  49.  
  50.   VN_SIGHT = 9    # 设定尺寸大小补正在游戏中使用的游戏变量
  51. end
  52.  
  53. #==============================================================================
  54. # □ RPG::BaseItem
  55. #==============================================================================
  56. class RPG::BaseItem
  57.   #--------------------------------------------------------------------------
  58.   # ○ 视界制限补正値
  59.   #--------------------------------------------------------------------------
  60.   def sight_power
  61.     unless @sight_power
  62.       @sight_power = /<视界补正\s*(\-*\d+)\s*>/ =~ @note ? $1.to_i : 0
  63.     end
  64.     @sight_power
  65.   end
  66. end
  67.  
  68. #==============================================================================
  69. # ■ Game_Actor
  70. #==============================================================================
  71. class Game_Actor
  72.   #--------------------------------------------------------------------------
  73.   # ○ 视界制限补正値
  74.   #--------------------------------------------------------------------------
  75.   def sight_power
  76.     result = 0
  77.     feature_objects.each {|object| result += object.sight_power}
  78.     result
  79.   end
  80. end
  81.  
  82. #==============================================================================
  83. # □ Sprite_SightShadow
  84. #==============================================================================
  85. class Sprite_SightShadow < Sprite
  86.   #--------------------------------------------------------------------------
  87.   # ● 物件初期化
  88.   #--------------------------------------------------------------------------
  89.   def initialize(viewport = nil)
  90.     super(viewport)
  91.     self.z = 199
  92.     self.bitmap = Bitmap.new(Graphics.width, Graphics.height)
  93.     @bitmap_shadow = Bitmap.new("Graphics/System/sight_shadow")
  94.   end
  95.   #--------------------------------------------------------------------------
  96.   # ● 解放
  97.   #--------------------------------------------------------------------------
  98.   def dispose
  99.     self.bitmap.dispose
  100.     @bitmap_shadow.dispose
  101.     super
  102.   end
  103.   #--------------------------------------------------------------------------
  104.   # ● 帧更新
  105.   #--------------------------------------------------------------------------
  106.   def update
  107.     super
  108.     if TMBLSIGHT::SIGHT[$game_map.map_id]
  109.       self.visible = true
  110.       self.bitmap.clear
  111.       w = TMBLSIGHT::SIGHT[$game_map.map_id]
  112.       $game_party.battle_members.each{|actor| w = [w + actor.sight_power, 48].max}
  113.       w = [w + $game_variables[TMBLSIGHT::VN_SIGHT], 48].max
  114.       x = $game_player.screen_x - w / 2
  115.       y = $game_player.screen_y - w / 2 - 16
  116.       rect = Rect.new(x, y, w, w)
  117.       self.bitmap.stretch_blt(rect, @bitmap_shadow, @bitmap_shadow.rect)
  118.       color = Color.new(0, 0, 0)
  119.       self.bitmap.fill_rect(0, 0, Graphics.width, y, color)
  120.       self.bitmap.fill_rect(0, y + w, Graphics.width, Graphics.height - y - w,
  121.         color)
  122.       self.bitmap.fill_rect(0, y, x, w, color)
  123.       self.bitmap.fill_rect(x + w, y, Graphics.width - x - w, w, color)
  124.     else
  125.       self.visible = false
  126.     end
  127.   end
  128. end
  129.  
  130. #==============================================================================
  131. # ■ Spriteset_Map
  132. #==============================================================================
  133. class Spriteset_Map
  134.   #--------------------------------------------------------------------------
  135.   # ● 物件初期化
  136.   #--------------------------------------------------------------------------
  137.   alias tmblsight_spriteset_map_initialize initialize
  138.   def initialize
  139.     tmblsight_spriteset_map_initialize
  140.     create_sight_shadow
  141.   end
  142.   #--------------------------------------------------------------------------
  143.   # ○ 作成视界制限Sprite
  144.   #--------------------------------------------------------------------------
  145.   def create_sight_shadow
  146.     @sight_shadow_sprite = Sprite_SightShadow.new(@viewport2)
  147.   end
  148.   #--------------------------------------------------------------------------
  149.   # ● 解放
  150.   #--------------------------------------------------------------------------
  151.   alias tmblsight_spriteset_map_dispose dispose
  152.   def dispose
  153.     tmblsight_spriteset_map_dispose
  154.     dispose_sight_shadow
  155.   end
  156.   #--------------------------------------------------------------------------
  157.   # ○ 解放视界制限Sprites
  158.   #--------------------------------------------------------------------------
  159.   def dispose_sight_shadow
  160.     @sight_shadow_sprite.dispose
  161.   end
  162.   #--------------------------------------------------------------------------
  163.   # ● 帧更新
  164.   #--------------------------------------------------------------------------
  165.   alias tmblsight_spriteset_map_update update
  166.   def update
  167.     update_sight_shadow
  168.     tmblsight_spriteset_map_update
  169.   end
  170.   #--------------------------------------------------------------------------
  171.   # ○ 更新视界制限Sprites
  172.   #--------------------------------------------------------------------------
  173.   def update_sight_shadow
  174.     @sight_shadow_sprite.update if @sight_shadow_sprite
  175.   end
  176. end

作者: QQ蚊子湯    时间: 2017-1-1 22:11
像這樣用1號變數決定是否限制視野嗎?

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[1] = 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.       if TMBLSIGHT::SIGHT[$game_variables[1]]
  115.       self.visible = true
  116.       w = TMBLSIGHT::SIGHT[$game_map.map_id]      # マップに設定された補正値
  117.       w += $game_variables[TMBLSIGHT::VN_SIGHT]   # ゲーム変数による補正値
  118.       $game_party.battle_members.each do |actor|
  119.         w = [w + actor.sight_power, 48].max       # 戦闘メンバーの補正値
  120.       end
  121.       x = $game_player.screen_x - w / 2
  122.       y = $game_player.screen_y - w / 2 - 16
  123.       if w != @last_w || x != @last_x || y != @last_y
  124.         @last_w = w
  125.         @last_x = x
  126.         @last_y = y
  127.         self.bitmap.clear
  128.         rect = Rect.new(x, y, w, w)
  129.         self.bitmap.stretch_blt(rect, @bitmap_shadow, @bitmap_shadow.rect)
  130.         color = Color.new(0, 0, 0)
  131.         self.bitmap.fill_rect(0, 0, Graphics.width, y, color)
  132.         self.bitmap.fill_rect(0, y + w, Graphics.width, Graphics.height - y - w, color)
  133.         self.bitmap.fill_rect(0, y, x, w, color)
  134.         self.bitmap.fill_rect(x + w, y, Graphics.width - x - w, w, color)
  135.       end
  136.     else
  137.       self.visible = false
  138.     end
  139.   end
  140. end
  141.  
  142. #==============================================================================
  143. # ■ Spriteset_Map
  144. #==============================================================================
  145. class Spriteset_Map
  146.   #--------------------------------------------------------------------------
  147.   # ● オブジェクト初期化
  148.   #--------------------------------------------------------------------------
  149.   alias tmblsight_spriteset_map_initialize initialize
  150.   def initialize
  151.     tmblsight_spriteset_map_initialize
  152.     create_sight_shadow
  153.   end
  154.   #--------------------------------------------------------------------------
  155.   # ○ 視界制限スプライトの作成
  156.   #--------------------------------------------------------------------------
  157.   def create_sight_shadow
  158.     @sight_shadow_sprite = Sprite_SightShadow.new(@viewport2)
  159.     update_sight_shadow
  160.   end
  161.   #--------------------------------------------------------------------------
  162.   # ● 解放
  163.   #--------------------------------------------------------------------------
  164.   alias tmblsight_spriteset_map_dispose dispose
  165.   def dispose
  166.     dispose_sight_shadow
  167.     tmblsight_spriteset_map_dispose
  168.   end
  169.   #--------------------------------------------------------------------------
  170.   # ○ 視界制限スプライトの解放
  171.   #--------------------------------------------------------------------------
  172.   def dispose_sight_shadow
  173.     @sight_shadow_sprite.dispose
  174.   end
  175.   #--------------------------------------------------------------------------
  176.   # ● フレーム更新
  177.   #--------------------------------------------------------------------------
  178.   alias tmblsight_spriteset_map_update update
  179.   def update
  180.     update_sight_shadow
  181.     tmblsight_spriteset_map_update
  182.   end
  183.   #--------------------------------------------------------------------------
  184.   # ○ 視界制限スプライトの更新
  185.   #--------------------------------------------------------------------------
  186.   def update_sight_shadow
  187.     @sight_shadow_sprite.update if @sight_shadow_sprite
  188.   end
  189. end





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