Project1

标题: 关于視界制限脚本 [打印本页]

作者: gz29767562    时间: 2012-2-26 23:45
标题: 关于視界制限脚本
本帖最后由 gz29767562 于 2012-2-27 11:53 编辑
  1. #==============================================================================
  2. # ★ RGSS3_視界制限 Ver1.1
  3. #==============================================================================
  4. =begin

  5. 作者:tomoaky
  6. 首發網站:ひきも記 (http://hikimoki.sakura.ne.jp/)

  7. 設定號碼的地圖限制視野。

  8. 寫在角色,職業,是在武器(防護具)的備註中的標籤
  9. 能補正視野限制的尺寸。
  10. 例)<視界補正 32>
  11. 視界32點擴大広。
  12. 只有戰鬥成員進行視野補正價值的計算。

  13. 遊戲變量(默認情況下,#9),可以調整大小使用視圖領域。

  14. 加入上述所有設置,將獲得的實際大小限制的能見度。
  15. 然而,如果尚未設置能見度限制的地圖上都是無效的。

  16. 因為每幀都會重繪整個屏幕的Sprite
  17. 將會有所加重。

  18. 操作所需的圖像
  19.   Graphics/System/sight_shadow.png
  20.   
  21. 遊戲變量使用(默認設置)
  22.   0009

  23. 2012.02.05  Ver1.1
  24.   ・調整Z坐標使計時器使不被遮住
  25.   ・加使用遊戲變量補正視野限制尺寸的功能(通過變量可做成開/関效果)
  26.   
  27. 2012.01.20  Ver1.0
  28.   公開

  29. =end

  30. #==============================================================================
  31. # □ 設定項目
  32. #==============================================================================
  33. module TMBLSIGHT
  34.   # 指定幾號的地圖進行視界制限
  35.   # 例)SIGHT[3] = 128  # 設置地圖號碼3的視野能見度128点矩形
  36.   SIGHT = {}
  37.   SIGHT[15] = 100

  38.   
  39.   VN_SIGHT = 9    # 設定尺寸大小補正在遊戲中使用的遊戲變量
  40. end

  41. #==============================================================================
  42. # □ RPG::BaseItem
  43. #==============================================================================
  44. class RPG::BaseItem
  45.   #--------------------------------------------------------------------------
  46.   # ○ 視界制限補正値
  47.   #--------------------------------------------------------------------------
  48.   def sight_power
  49.     unless @sight_power
  50.       @sight_power = /<視界補正\s*(\-*\d+)\s*>/ =~ @note ? $1.to_i : 0
  51.     end
  52.     @sight_power
  53.   end
  54. end

  55. #==============================================================================
  56. # ■ Game_Actor
  57. #==============================================================================
  58. class Game_Actor
  59.   #--------------------------------------------------------------------------
  60.   # ○ 視界制限補正値
  61.   #--------------------------------------------------------------------------
  62.   def sight_power
  63.     result = 0
  64.     feature_objects.each {|object| result += object.sight_power}
  65.     result
  66.   end
  67. end

  68. #==============================================================================
  69. # □ Sprite_SightShadow
  70. #==============================================================================
  71. class Sprite_SightShadow < Sprite
  72.   #--------------------------------------------------------------------------
  73.   # ● 物件初期化
  74.   #--------------------------------------------------------------------------
  75.   def initialize(viewport = nil)
  76.     super(viewport)
  77.     self.z = 199
  78.     self.bitmap = Bitmap.new(Graphics.width, Graphics.height)
  79.     @bitmap_shadow = Bitmap.new("Graphics/System/sight_shadow")
  80.   end
  81.   #--------------------------------------------------------------------------
  82.   # ● 解放
  83.   #--------------------------------------------------------------------------
  84.   def dispose
  85.     self.bitmap.dispose
  86.     @bitmap_shadow.dispose
  87.     super
  88.   end
  89.   #--------------------------------------------------------------------------
  90.   # ● 幀更新
  91.   #--------------------------------------------------------------------------
  92.   def update
  93.     super
  94.     if TMBLSIGHT::SIGHT[$game_map.map_id]
  95.       self.visible = true
  96.       self.bitmap.clear
  97.       w = TMBLSIGHT::SIGHT[$game_map.map_id]
  98.       $game_party.battle_members.each{|actor| w = [w + actor.sight_power, 48].max}
  99.       w = [w + $game_variables[TMBLSIGHT::VN_SIGHT], 48].max
  100.       x = $game_player.screen_x - w / 2
  101.       y = $game_player.screen_y - w / 2 - 16
  102.       rect = Rect.new(x, y, w, w)
  103.       self.bitmap.stretch_blt(rect, @bitmap_shadow, @bitmap_shadow.rect)
  104.       color = Color.new(0, 0, 0)
  105.       self.bitmap.fill_rect(0, 0, Graphics.width, y, color)
  106.       self.bitmap.fill_rect(0, y + w, Graphics.width, Graphics.height - y - w,
  107.         color)
  108.       self.bitmap.fill_rect(0, y, x, w, color)
  109.       self.bitmap.fill_rect(x + w, y, Graphics.width - x - w, w, color)
  110.     else
  111.       self.visible = false
  112.     end
  113.   end
  114. end

  115. #==============================================================================
  116. # ■ Spriteset_Map
  117. #==============================================================================
  118. class Spriteset_Map
  119.   #--------------------------------------------------------------------------
  120.   # ● 物件初期化
  121.   #--------------------------------------------------------------------------
  122.   alias tmblsight_spriteset_map_initialize initialize
  123.   def initialize
  124.     tmblsight_spriteset_map_initialize
  125.     create_sight_shadow
  126.   end
  127.   #--------------------------------------------------------------------------
  128.   # ○ 作成視界制限Sprite
  129.   #--------------------------------------------------------------------------
  130.   def create_sight_shadow
  131.     @sight_shadow_sprite = Sprite_SightShadow.new(@viewport2)
  132.   end
  133.   #--------------------------------------------------------------------------
  134.   # ● 解放
  135.   #--------------------------------------------------------------------------
  136.   alias tmblsight_spriteset_map_dispose dispose
  137.   def dispose
  138.     tmblsight_spriteset_map_dispose
  139.     dispose_sight_shadow
  140.   end
  141.   #--------------------------------------------------------------------------
  142.   # ○ 解放視界制限Sprites
  143.   #--------------------------------------------------------------------------
  144.   def dispose_sight_shadow
  145.     @sight_shadow_sprite.dispose
  146.   end
  147.   #--------------------------------------------------------------------------
  148.   # ● 幀更新
  149.   #--------------------------------------------------------------------------
  150.   alias tmblsight_spriteset_map_update update
  151.   def update
  152.     update_sight_shadow
  153.     tmblsight_spriteset_map_update
  154.   end
  155.   #--------------------------------------------------------------------------
  156.   # ○ 更新視界制限Sprites
  157.   #--------------------------------------------------------------------------
  158.   def update_sight_shadow
  159.     @sight_shadow_sprite.update if @sight_shadow_sprite
  160.   end
  161. end

  162.   
复制代码
我想问下这个脚本可以支持多张地图視界制限吗?可以的话,怎么操作呢,谢谢。哈哈
作者: tseyik    时间: 2012-2-27 09:22
本帖最后由 tseyik 于 2012-2-27 13:45 编辑

可以
  SIGHT[15] = 100多幾句就可以了
如  SIGHT[5] = 100
  SIGHT[1] = 32
那地図1的視界基本制限是32
那地図5的視界基本制限是100

這裏有個灯光系統、可以用事件指定地図光/暗切換
更好用
半生@Page(仮)



‘‘──tseyik于2012-2-27 13:45补充以下内容

灯光  sample_beta.zip
http://115.com/file/c24ir9an#
這會用到Bitmap功能拡張DLL(tktk_bitmap.dll)
和這二個脚本
Bitmapクラスの拡張
HN_Light

…………………………………………………………………………
Bitmap功的效果可到覷看
http://www.tktkgame.com/tkool/rgss_common/bitmap_extension.html

’’




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