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

Project1

 找回密码
 注册会员
搜索
查看: 2232|回复: 2
打印 上一主题 下一主题

[已经解决] 关于视觉限制的问题

[复制链接]

Lv1.梦旅人

梦石
0
星屑
45
在线时间
152 小时
注册时间
2016-10-14
帖子
643
跳转到指定楼层
1
发表于 2017-1-1 10:57:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
视觉限制怎么通过变量来选择视觉限制的地图
这个问题我没搞清楚 求指教
脚本如下
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

点评

来来来!!! 先把脚本的6行到33从头到尾仔仔细细的看个几遍。  发表于 2017-1-1 14:28
最近学习列表 1:ps 2:脚本 3:即时战斗脚本 4:剧情 5:.... 我还是什么都不会 QAQ 回复

Lv2.观梦者

梦石
0
星屑
644
在线时间
830 小时
注册时间
2016-7-24
帖子
649

开拓者

2
发表于 2017-1-1 22:11:25 | 只看该作者
像這樣用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

评分

参与人数 2星屑 +280 收起 理由
RaidenInfinity + 250 版主代认可的答案
七重 + 30 反扑的说~

查看全部评分

2016/07/17 加入RPG製作,勿忘初衷!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-17 01:46

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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