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

Project1

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

[转载] [RMVA]日本的烛光系統-中文化

[复制链接]

Lv5.捕梦者

梦石
0
星屑
22923
在线时间
8637 小时
注册时间
2011-12-31
帖子
3367
跳转到指定楼层
发表于 2012-2-28 22:10:44 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式

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

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

x
本帖最后由 tseyik 于 2015-2-17 11:59 编辑

這個灯光系統、可以用事件指定地図光/暗切換

原脚本來自
半生@Page(仮)
灯光(日文)  sample_beta.zip
http://pan.baidu.com/share/link?shareid=99516&uk=2635094904


繁体範本
http://115.com/file/e7fk7e7v#
Project3.exe

這個脚本要把Bitmap功能拡張DLL(tktk_bitmap.dll)
放在専案/GAME.exe同一件夾中
叧外加入這二個脚本
Bitmap
HN_Ligh

Bitmap脚本
  1. # coding: utf-8
  2. =begin
  3. = Bitmap类拡张 (DLL版)
  4. RPGツクールXP/VX/VA共用
  5. 添加功能 Bitmap 类。
  6. - Marshaldump 启用
  7. - 保存为PNG文件
  8. -色调变化
  9. -马赛克效果
  10. -反相颜色
  11. -模糊效果
  12. -使用遮罩-切除
  13. -混合

  14. ■ 注意
  15. 这个脚本需要"tktk_bitmap.dll"(ver0.1.2.6以上)。

  16. Author::    半生
  17. Date::      2010/12/13
  18. Version::   0.1.2.6
  19. URL::       [url]http://www.tktkgame.com/[/url]

  20. ################更新########################
  21. 2010/12/13 ver 0.1.2.6
  22.  dll名称从"hn_rg_bitmap.dll"变更为"tktk_bitmap.dll"
  23.  LARGE_BITMAP机能でメモリを确保できなかった场合の処理を追加
  24. 2010/10/12 ver 0.1.2.5(デンジャラスベータ版)
  25.  大きいサイズのBitmapオブジェクトを机能を试験的に実装(危険)
  26. 2010/03/24 ver 0.1.2.2
  27.  ブレンディング机能関连の軽量化。
  28.  画像连结系メソッドの分离。
  29. 2010/03/24 ver 0.1.2.1
  30.  ブレンディング机能関连のバグフィックス
  31. 2010/03/22 ver 0.1.2.0
  32.  加算合成等のブレンディング机能の追加
  33. 2010/02/07 ver 0.1.1.0
  34.  マーシャル化の処理の一部をDLLに移动
  35. 2010/01/17 ver 0.1.0.0
  36.  dllの名称を"hn_rx_bitmap.dll"から"hn_rg_bitmap.dll"に変更
  37.  モザイク効果・色反転・ぼかし効果の追加
  38. ############################################
  39. =end

  40. module TKTK_Bitmap
  41.   LARGE_BITMAP = true # 是否使用大型点阵图的功能
  42.   DLL_NAME = 'tktk_bitmap'

  43.   ERROR_ALLOCATE_FAILED = -110002

  44.   @@png_save = Win32API.new(DLL_NAME, 'PngSaveA', 'p n i i', 'i')
  45.   @@blur = Win32API.new(DLL_NAME, 'Blur', 'n i', 'i')
  46.   @@change_tone = Win32API.new(DLL_NAME, 'ChangeTone', 'n i i i i', 'i')
  47.   @@clip_mask = Win32API.new(DLL_NAME, 'ClipMask', 'n n i i i', 'i')
  48.   @@invert = Win32API.new(DLL_NAME, 'InvertColor', 'n', 'i')
  49.   @@mosaic = Win32API.new(DLL_NAME, 'Mosaic', 'n i i i i i i', 'i')
  50.   @@address = Win32API.new(DLL_NAME, 'GetAddress', 'n', 'n')
  51.   @@get_pixel_data = Win32API.new(DLL_NAME, 'GetPixelData', 'n p i', 'i')
  52.   @@set_pixel_data = Win32API.new(DLL_NAME, 'SetPixelData', 'n p i', 'i')
  53.   @@blend_blt = Win32API.new(DLL_NAME, 'BlendBlt', 'n i i n i i i i i i', 'i')
  54.   #@@get_hwnd = Win32API.new(DLL_NAME, 'GetGameHWND', 'v', 'l')
  55.   @@change_size = Win32API.new(DLL_NAME, 'ChangeSize', 'n i i', 'i')
  56.   module_function

  57.   # PNG形式储存
  58.   def png_save(bitmap,file_name,compression_level,filter)
  59.     return @@png_save.call(file_name, bitmap.object_id, compression_level, filter)
  60.   end

  61.   # 模糊效果
  62.   def blur(bitmap, r = 1)
  63.     return @@blur.call(bitmap.object_id, r)
  64.   end
  65.   
  66.   # 更改颜色平衡?
  67.   def change_tone(bitmap, red = 0, green = 0, blue = 0, simplify = 1)
  68.     return @@change_tone.call(bitmap.object_id, red, green, blue, simplify)
  69.   end
  70. # 剪贴蒙版图像(α乘法)
  71.   def clip_mask(g_bitmap, m_bitmap, x=0, y=0, outer=0)
  72.     return @@clip_mask.call(g_bitmap.object_id, m_bitmap.object_id, x, y, outer)
  73.   end

  74.   # 色的反转
  75.   def invert(bitmap)
  76.     return @@invert.call(bitmap.object_id)
  77.   end

  78.   # 马赛克效果
  79.   def mosaic(bitmap, msw=5, msh=5)
  80.     return self.mosaic_rect(bitmap, bitmap.rect, msw, msh)
  81.   end

  82.   # 马赛克效果(范围指定)
  83.   def mosaic_rect(bitmap, rect, msw=5, msh=5)
  84.     return @@mosaic.call(bitmap.object_id,
  85.     rect.x, rect.y, rect.width, rect.height, msw, msh)
  86.   end

  87.   # 获取Bitmap资料位址
  88.   def address(bitmap)
  89.     return @@address.call(bitmap.object_id)
  90.   end
  91.   
  92.   # 二进位资料获取点Bitmap阵图
  93.   def get_pixel_data(bitmap)
  94.     buffer = "bgra" * bitmap.width * bitmap.height
  95.     @@get_pixel_data.call(bitmap.object_id, buffer, buffer.size)
  96.     return buffer
  97.   end
  98.   
  99.   #替换为Bitmap中的二进位资料
  100.   def set_pixel_data(bitmap, data)
  101.     return @@set_pixel_data.call(bitmap.object_id, data, data.size)
  102.   end
  103.   
  104.   def blend_blt(dest_bmp, x, y, src_bmp, rect, blend_type=0, opacity=255)
  105.     @@blend_blt.call(dest_bmp.object_id, x, y, src_bmp.object_id,
  106.                 rect.x, rect.y, rect.width, rect.height,
  107.                 blend_type, opacity)
  108.   end

  109.   # 改变Bitmap的大小(风险)
  110.   def change_size(bitmap, new_width, new_height)
  111.     return -1 if (new_width <=0 or new_height <= 0)
  112.     result = @@change_size.call(bitmap.object_id, new_width, new_height)
  113.     if result == ERROR_ALLOCATE_FAILED
  114.       raise("tktk_bitmap:ERROR ALLOCATE FAILED")
  115.     end
  116.     return result
  117.   end
  118.   
  119. end

  120. class Font
  121.   def marshal_dump;end
  122.   def marshal_load(obj);end
  123. end
  124. class Bitmap
  125.   # PNG 压缩筛检程式
  126.   PNG_NO_FILTERS   = 0x00
  127.   PNG_FILTER_NONE  = 0x08
  128.   PNG_FILTER_SUB   = 0x10
  129.   PNG_FILTER_UP    = 0x20
  130.   PNG_FILTER_AVG   = 0x40
  131.   PNG_FILTER_PAETH = 0x80
  132.   PNG_ALL_FILTERS  = (PNG_FILTER_NONE | PNG_FILTER_SUB | PNG_FILTER_UP |
  133.                       PNG_FILTER_AVG | PNG_FILTER_PAETH)

  134.   # Marshal_dump
  135.   def _dump(limit)
  136.     return "" if self.disposed?
  137.     data = TKTK_Bitmap.get_pixel_data(self)
  138.     [width, height, Zlib::Deflate.deflate(data)].pack("LLa*") # ついでに圧缩
  139.   end
  140.   
  141.   # Marshal_load
  142.   def self._load(str)
  143.     if str == ""
  144.       b = Bitmap.new(1,1)
  145.       b.dispose
  146.       return b
  147.     end
  148.     w, h, zdata = str.unpack("LLa*"); b = new(w, h)
  149.     TKTK_Bitmap.set_pixel_data(b, Zlib::Inflate.inflate(zdata))
  150.     return b
  151.   end  
  152.   
  153.   def address
  154.     TKTK_Bitmap.address(self)
  155.   end

  156.   #     模糊效果
  157.   def blur2(r=1)
  158.     TKTK_Bitmap.blur(self, r)
  159.   end

  160.   # 色调变化
  161.   def change_tone(red, green, blue, simplify = 1)
  162.     TKTK_Bitmap.change_tone(self, red, green, blue, simplify)
  163.   end
  164.   
  165.   # 剪切
  166.   def clip_mask(bitmap, x=0, y=0, outer=0)
  167.     TKTK_Bitmap.clip_mask(self, bitmap, x, y, outer)
  168.   end

  169.   # 反相颜色
  170.   def invert
  171.     TKTK_Bitmap.invert(self)
  172.   end

  173.   # 马赛克效果
  174.   def mosaic(msw=5, msh=5)
  175.     TKTK_Bitmap.mosaic(self, msw, msh)
  176.   end

  177.   # 马赛克效果 (指定区域)
  178.   def mosaic_rect(rect=self.rect, msw=5, msh=5)
  179.     TKTK_Bitmap.mosaic_rect(self, rect, msw, msh)
  180.   end

  181.   # 混合
  182.   def blend_blt(x, y, src_bmp, rect, blend_type=0, opacity=255)
  183.     return if opacity <= 0
  184.     TKTK_Bitmap.blend_blt(self, x, y, src_bmp, rect, blend_type, opacity)
  185.   end

  186.   #Png 格式保存
  187.   def png_save(outp, level = 9, filter = PNG_NO_FILTERS)
  188.     if (TKTK_Bitmap.png_save(self, outp, level, filter) != 0)
  189.       raise("Bitmap\#png_save failed")
  190.     end
  191.   end

  192.   # 允许更大的 bitmap.new (危険)
  193.   # 宽度 * 高度大约是1073741823
  194.   if TKTK_Bitmap::LARGE_BITMAP
  195.     class << self
  196.       unless method_defined?(:_hn_large_bm__new)
  197.         alias :_hn_large_bm__new :new
  198.       end
  199.       def new(*args)
  200.         if args.size == 2 && args[0] * args[1] >= 4194304
  201.           new_width = args[0]
  202.           new_height = args[1]
  203.           # 暂时以小尺寸作成
  204.           bitmap = _hn_large_bm__new(16, 16)
  205.           TKTK_Bitmap.change_size(bitmap, new_width, new_height)
  206.           return bitmap
  207.         else
  208.           _hn_large_bm__new(*args)
  209.         end
  210.       end
  211.     end # Bitmap.new
  212.   end
  213. end # CLASS Bitmap
复制代码
HN_Ligh脚本

  1. =begin
  2.   HN_Light version 1.0.1.0 for VX Ace
  3.         by 半生
  4. http://www.tktkgame.com

  5.   要HN_RG_BITMAP(ver 0.1.2.1以降)

  6. 2012/01/08 ver 1.0.1.2
  7.  队列歩行の仲间に対応

  8. =end

  9. # ----- 在这里设定-----
  10. module HN_Light
  11.   # 简略化0:(精细)~2:(粗暴,负荷轻)
  12.   SIMPLIFY = 1
  13.   
  14.   # 家的烛光类型使用的变量号码
  15.   PLAYER_LIGHT_TYPE = 12

  16.   # 队友的烛光类型使用的变量号码
  17.   FOLLOWER_LIGHT_TYPE = 12
  18.   
  19.   # 黑暗判断上使用的开
  20.   DARK_SWITCH = 11
  21.   
  22.   # 烛光事件识别用的正规表达式
  23.   REGEX_LIGHT = /@LIGHT(\d+)/
  24.   
  25.   # 烛光图像的目录
  26.   LIGHT_IMG_DIR = "Graphics/Pictures/"
  27.   
  28.   # 烛光Bitmap设定
  29.   LIGHTS = [
  30.   # [FILENAME, CELLS, ZOOM, OFFSET_Y, HUE]
  31.     ["light5",     1,  1.5,        0,   0],
  32.     ["light2",     1,  1.0,        0,   0],
  33.     ["light3",     1,  0.8,        0,   0],
  34.     ["light4",     1,  1.0,      -16,   0],
  35.     ["light5",     1,  2.0,        0,   0],
  36.     ["light6",     1,  1.0,        0,   0],
  37.     ["light7",     1,  3.0,      -16,   0],
  38.     ["light1",     1,  0.5,        0,   0],
  39.     ["light6",     1,  2.0,        0,   0],
  40.   ]
  41. end
  42. #  ----- 在这里设定 -----

  43. module HN_Light
  44.   # 事件mix-in用
  45.   module LightEvent
  46.     attr_reader :light_type
  47.     def initialize
  48.       super()
  49.       @light_type = 0
  50.     end
  51.    
  52.     def check_light
  53.       @light_type = 0
  54.       return if @list.nil?
  55.       @list.each do |command|
  56.         break if @light_type > 0
  57.         if command.code == 108 or command.code == 408
  58.           command.parameters.each do |line|
  59.             if line =~ REGEX_LIGHT
  60.               @light_type = $1.to_i
  61.               break
  62.             end
  63.           end
  64.         end
  65.       end # END @list.each
  66.     end
  67.    
  68.   end # END module LightEvent
  69.   
  70.   
  71.   class Light
  72.     attr_reader :bitmap
  73.     attr_reader :cells
  74.     attr_reader :width
  75.     attr_reader :height
  76.     attr_reader :ox
  77.     attr_reader :oy
  78.     def initialize(light_type, s_zoom = 1)
  79.       light = LIGHTS[light_type - 1]
  80.       if light.nil?
  81.         # 本来不应该来这里
  82.         @bitmap = Bitmap.new(32, 32)
  83.         @cels = 1
  84.         @zoom = 1.0
  85.         @oy = 16
  86.         @ox = 16
  87.         @width  = 32
  88.         @height = 32
  89.       else
  90.         @bitmap = Bitmap.new(LIGHT_IMG_DIR + light[0])
  91.         @bitmap.invert()
  92.         @cells = light[1].to_i
  93.         @cells = 1 if (@cells < 1 or @cells > @bitmap.width)
  94.         @zoom = light[2].to_f
  95.         @zoom = 1.0 if @zoom <= 0.0
  96.         @zoom /= s_zoom
  97.         @width  = @bitmap.width / @cells
  98.         @height = @bitmap.height

  99.         # 缩放处理
  100.         if @zoom != 1.0
  101.           new_width  = (@width * @zoom).round
  102.           new_height = (@height * @zoom).round
  103.           if new_width * new_height < 1
  104.             @zoom = 1.0
  105.           else
  106.             @width = new_width
  107.             @height = new_height
  108.             new_bitmap = Bitmap.new(@width * @cells, @height)
  109.             new_bitmap.stretch_blt(new_bitmap.rect,@bitmap, @bitmap.rect)
  110.             @bitmap.dispose
  111.             @bitmap = new_bitmap
  112.           end
  113.         end
  114.         @ox = @width / 2
  115.         @oy = @height / 2 - light[3].to_i / s_zoom

  116.         # 色相変换
  117.         if ( (hue = light[4].to_i) != 0)
  118.           @bitmap.hue_change(hue)
  119.         end
  120.       end
  121.     end # End def initialize

  122.     # 色调转换
  123.     def dispose
  124.       @bitmap.dispose
  125.       @bitmap = nil
  126.     end
  127.   end

  128. end

  129. class Game_Event
  130.   include HN_Light::LightEvent
  131.   alias :_hn_light__setup :setup_page unless method_defined?(:_hn_light__setup)
  132.   def setup_page(new_page)
  133.     _hn_light__setup(new_page)
  134.     check_light()
  135.   end
  136. end

  137. class Game_Player
  138.   def light_type
  139.     return $game_variables[HN_Light::PLAYER_LIGHT_TYPE]
  140.   end
  141. end

  142. class Game_Follower
  143.   def light_type
  144.     return 0 if !self.visible?
  145.     return $game_variables[HN_Light::FOLLOWER_LIGHT_TYPE]
  146.   end
  147. end

  148. class Game_Map
  149.   attr_reader :light_events
  150.   
  151.   # 更新烛光事件列表
  152.   def refresh_lights
  153.     @light_events = []
  154.     @events.values.each do |event|
  155.       if (event.light_type > 0)
  156.         @light_events.push(event)
  157.       end
  158.     end
  159.   end

  160.   alias :_hn_light__setup_events :setup_events unless method_defined?(:_hn_light__setup_events)
  161.   def setup_events
  162.     _hn_light__setup_events()
  163.     refresh_lights()
  164.   end
  165.   
  166.   alias :_hn_light__refresh :refresh unless method_defined?(:_hn_light__refresh)
  167.   def refresh
  168.     _hn_light__refresh()
  169.     refresh_lights()
  170.   end
  171. end

  172. class Sprite_Dark < Sprite
  173.   @@base_color = Color.new(255,255,255)

  174.   def initialize(viewport = nil)
  175.     super(viewport)
  176.     @width = Graphics.width
  177.     @height = Graphics.height
  178.    
  179.     case HN_Light::SIMPLIFY
  180.     when 1
  181.       @zoom = 2
  182.     when 2
  183.       @zoom = 4
  184.     else
  185.       @zoom = 1
  186.     end
  187.     @width /= @zoom
  188.     @height /= @zoom
  189.     self.zoom_x = @zoom.to_f
  190.     self.zoom_y = @zoom.to_f
  191.    
  192.     self.bitmap = Bitmap.new(@width, @height)
  193.     self.bitmap.fill_rect(self.bitmap.rect, @@base_color)
  194.     self.blend_type = 2 # 混合型(减算)
  195.     self.z = 500
  196.     self.visible = false
  197.     @light_cache = {}
  198.   end

  199.   # 追加烛光
  200.   def add_light(charactor)
  201.     return if charactor.nil?
  202.     light_type = charactor.light_type
  203.     return if (light_type < 1 or light_type > HN_Light::LIGHTS.size)
  204.     unless @light_cache.key?(light_type)
  205.       @light_cache[light_type] = HN_Light::Light.new(light_type, @zoom)
  206.     end
  207.     light = @light_cache[light_type]

  208.     # 画面外什麽都不做
  209.     if @zoom == 1
  210.       return if (charactor.screen_x < 0  - light.width + light.ox)
  211.       return if (charactor.screen_x > @width + light.ox)
  212.       return if (charactor.screen_y < 0 - light.height + light.oy)
  213.       return if (charactor.screen_y > @height + light.oy)
  214.     else
  215.       return if (charactor.screen_x < 0  - (light.width + light.ox) * @zoom)
  216.       return if (charactor.screen_x > (@width + light.ox)  * @zoom)
  217.       return if (charactor.screen_y < 0 - (light.height + light.oy) * @zoom)
  218.       return if (charactor.screen_y > (@height + light.oy) * @zoom)
  219.     end

  220.     # 动画判定
  221.     if light.cells > 1
  222.       index = (Graphics.frame_count / 4) % light.cells
  223.       rect = Rect.new(index * light.width , 0, light.width, light.height)
  224.     else
  225.       rect = light.bitmap.rect
  226.     end
  227.     if @zoom != 1
  228.       p_x = charactor.screen_x / @zoom - light.ox
  229.       p_y = (charactor.screen_y - 16) / @zoom - light.oy
  230.     else
  231.       p_x = charactor.screen_x - light.ox
  232.       p_y = charactor.screen_y - 16 - light.oy
  233.     end
  234.    
  235.     # 乗算合成(3)
  236.     self.bitmap.blend_blt(p_x, p_y, light.bitmap, rect, 3)
  237.   end

  238.   
  239.   def refresh
  240.     self.bitmap.fill_rect(self.bitmap.rect, @@base_color)
  241.     $game_map.light_events.each do |event|
  242.       next if HN_Light::LIGHTS[event.light_type - 1].nil?
  243.       add_light(event)
  244.     end
  245.     add_light($game_player)
  246.     $game_player.followers.each{|f| add_light(f)}
  247.   end
  248.   
  249.   # 更新
  250.   def update
  251.     super
  252.     refresh()
  253.   end
  254.   
  255.   #--------------------------------------------------------------------------
  256.   # ● 解放
  257.   #--------------------------------------------------------------------------
  258.   def dispose
  259.     self.bitmap.dispose
  260.     @light_cache.values.each do |light|
  261.       light.dispose
  262.     end
  263.     super
  264.   end
  265. end


  266. class Spriteset_Map  
  267.   # 动画判定
  268.   def create_dark
  269.     @dark_sprite = Sprite_Dark.new(@viewport1)
  270.   end

  271.   # 更新黑暗Sprite
  272.   def update_dark
  273.     if (@dark_sprite.visible = $game_switches[HN_Light::DARK_SWITCH])
  274.       @dark_sprite.update
  275.     end
  276.   end

  277.   # 破弃黑暗Sprite
  278.   def dispose_dark
  279.     @dark_sprite.dispose
  280.   end
  281.   
  282.   # 初期化
  283.   alias :_dark__initialize :initialize unless private_method_defined?(:_dark__initialize)
  284.   def initialize
  285.     _dark__initialize()
  286.     create_dark()
  287.     update_dark()
  288.   end
  289.   
  290.   # 更新
  291.   alias :_dark__update :update unless method_defined?(:_dark__update)
  292.   def update
  293.     _dark__update()
  294.     update_dark() if !@dark_sprite.nil? and !@dark_sprite.disposed?
  295.   end
  296.   
  297.   # 结束处理
  298.   alias :_dark__dispose :dispose unless method_defined?(:_dark__dispose)
  299.   def dispose
  300.     dispose_dark()
  301.     _dark__dispose()
  302.   end
  303. end
复制代码
Bitmap+"tktk_bitmap.dll"(ver0.1.2.6以上) 拡張提供以下功能

效果可到覷看
http://www.tktkgame.com/tkool/rgss_common/bitmap_extension.html
- Marshaldump 启用
- 保存为PNG文件
-色调变化
-马赛克效果
-反相颜色
-模糊效果
-使用遮罩-切除
-混合

HN_Ligh脚本提供燭光効果
地図黒暗模式使用了開閉11
主人公黒暗模式on/off用了変量12,可設定0不使用;1〜9不同図形
図形調用用了註釋@LIGHT0~9(和主人公黒暗図形ー様)(中文版)
地図黒暗模式on/off
只要在事件中切換
至於所要用到的図形放到Graphics\Pictures文件夾中

     

Image001.gif (25.37 KB, 下载次数: 0)

Image001.gif

Image002.gif (15.66 KB, 下载次数: 486)

Image002.gif

点评

115被和谐了啊~~  发表于 2012-8-30 08:09

评分

参与人数 1星屑 +50 收起 理由
无双sxa + 50 我很赞同

查看全部评分

Lv2.观梦者

梦石
0
星屑
771
在线时间
83 小时
注册时间
2020-4-10
帖子
55
37
发表于 2022-7-30 11:03:32 | 只看该作者
脚本"Bitmap" 第50行:发生RuntimeError。LoadLibrary: tktk bitmap怎么解决
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
20
在线时间
1 小时
注册时间
2021-8-31
帖子
2
36
发表于 2021-11-8 11:42:16 | 只看该作者
楼主,繁体范例能补个度盘吗?

点评

https://forum.gamer.com.tw/C.php?bsn=4918&snA=22703&page=1&gothis=200204#200204 內含详细的图文繁体说明  发表于 2021-11-8 11:47
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
291
在线时间
56 小时
注册时间
2020-1-1
帖子
6
35
发表于 2021-1-6 13:00:39 | 只看该作者
Uirel 发表于 2020-10-29 10:56
呜呜,大大,下载的案例链接都挂了,求一个补档


这里有可以下载的范例
https://rpg.blue/thread-378534-1-1.html
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
208
在线时间
37 小时
注册时间
2017-11-20
帖子
11
34
发表于 2020-10-29 10:56:20 | 只看该作者
呜呜,大大,下载的案例链接都挂了,求一个补档
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
235
在线时间
6 小时
注册时间
2012-3-31
帖子
10
33
发表于 2018-11-9 20:52:36 | 只看该作者
不知道内存会不会增大
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2438
在线时间
260 小时
注册时间
2016-3-25
帖子
40
32
发表于 2018-8-6 19:08:43 | 只看该作者
耳可亦虫 发表于 2017-12-21 23:09
请问,使用这个脚本,黑暗程度可以在中途更改吗?
比如说在这个房间里面黑暗程度需要(225,225,225),
但 ...

我自己照着XP版的修改了一下,可以根据变量来修改黑暗程度,把想下面的脚本,替换原来的就行了
脚本:

=begin
  HN_Light version 1.0.1.0 for VX Ace
        by 半生
http://www.tktkgame.com

  要HN_RG_BITMAP(ver 0.1.2.1以降)

2012/01/08 ver 1.0.1.2
 队列歩行の仲间に対応

=end

# ----- 在这里设定-----
module HN_Light
  # 简略化0:(精细)~2:(粗暴,负荷轻)
  SIMPLIFY = 1
  
  # 家的烛光类型使用的变量号码
  PLAYER_LIGHT_TYPE = 12

  
  # 表示黑暗处的不透明度的变量号码
  # 变量的数值为0-255,越大则不可见度越高
  DARK_OPACITY_VAR = 11
  
  
  # 队友的烛光类型使用的变量号码
  FOLLOWER_LIGHT_TYPE = 12
  
  # 黑暗判断上使用的开
  DARK_SWITCH = 11
  
  # 烛光事件识别用的正规表达式
  REGEX_LIGHT = /@LIGHT(\d+)/
  
  # 烛光图像的目录
  LIGHT_IMG_DIR = "Graphics/Pictures/"
  
  # 烛光Bitmap设定
  LIGHTS = [
  # [FILENAME, CELLS, ZOOM, OFFSET_Y, HUE]
    ["light5",     1,  1.5,        0,   0],
    ["light2",     1,  1.0,        0,   0],
    ["light3",     1,  0.8,        0,   0],
    ["light4",     1,  1.0,      -16,   0],
    ["light5",     1,  2.0,        0,   0],
    ["light6",     1,  1.0,        0,   0],
    ["light7",     1,  3.0,      -16,   0],
    ["light1",     1,  0.5,        0,   0],
    ["light6",     1,  2.0,        0,   0],
  ]
end
#  ----- 在这里设定 -----

module HN_Light
  # 事件mix-in用
  module LightEvent
    attr_reader :light_type
    def initialize
      super()
      @light_type = 0
    end
   
    def check_light
      @light_type = 0
      return if @list.nil?
      @list.each do |command|
        break if @light_type > 0
        if command.code == 108 or command.code == 408
          command.parameters.each do |line|
            if line =~ REGEX_LIGHT
              @light_type = $1.to_i
              break
            end
          end
        end
      end # END @list.each
    end
   
  end # END module LightEvent
  
  
  class Light
    attr_reader :bitmap
    attr_reader :cells
    attr_reader :width
    attr_reader :height
    attr_reader :ox
    attr_reader :oy
    def initialize(light_type, s_zoom = 1)
      light = LIGHTS[light_type - 1]
      if light.nil?
        # 本来不应该来这里
        @bitmap = Bitmap.new(32, 32)
        @cels = 1
        @zoom = 1.0
        @oy = 16
        @ox = 16
        @width  = 32
        @height = 32
      else
        @bitmap = Bitmap.new(LIGHT_IMG_DIR + light[0])
        @bitmap.invert()
        @cells = light[1].to_i
        @cells = 1 if (@cells < 1 or @cells > @bitmap.width)
        @zoom = light[2].to_f
        @zoom = 1.0 if @zoom <= 0.0
        @zoom /= s_zoom
        @width  = @bitmap.width / @cells
        @height = @bitmap.height

        # 缩放处理
        if @zoom != 1.0
          new_width  = (@width * @zoom).round
          new_height = (@height * @zoom).round
          if new_width * new_height < 1
            @zoom = 1.0
          else
            @width = new_width
            @height = new_height
            new_bitmap = Bitmap.new(@width * @cells, @height)
            new_bitmap.stretch_blt(new_bitmap.rect,@bitmap, @bitmap.rect)
            @bitmap.dispose
            @bitmap = new_bitmap
          end
        end
        @ox = @width / 2
        @oy = @height / 2 - light[3].to_i / s_zoom

        # 色相変换
        if ( (hue = light[4].to_i) != 0)
          @bitmap.hue_change(hue)
        end
      end
    end # End def initialize

    # 色调转换
    def dispose
      @bitmap.dispose
      @bitmap = nil
    end
  end

end

class Game_Event
  include HN_Light::LightEvent
  alias :_hn_light__setup :setup_page unless method_defined?(:_hn_light__setup)
  def setup_page(new_page)
    _hn_light__setup(new_page)
    check_light()
  end
end

class Game_Player
  def light_type
    return $game_variables[HN_Light::PLAYER_LIGHT_TYPE]
  end
end

class Game_Follower
  def light_type
    return 0 if !self.visible?
    return $game_variables[HN_Light::FOLLOWER_LIGHT_TYPE]
  end
end

class Game_Map
  attr_reader :light_events
  
  # 更新烛光事件列表
  def refresh_lights
    @light_events = []
    @events.values.each do |event|
      if (event.light_type > 0)
        @light_events.push(event)
      end
    end
  end

  alias :_hn_light__setup_events :setup_events unless method_defined?(:_hn_light__setup_events)
  def setup_events
    _hn_light__setup_events()
    refresh_lights()
  end
  
  alias :_hn_light__refresh :refresh unless method_defined?(:_hn_light__refresh)
  def refresh
    _hn_light__refresh()
    refresh_lights()
  end
end

class Sprite_Dark < Sprite
  @@base_color = Color.new(255,255,255)

  def initialize(viewport = nil)
    super(viewport)
    @width = Graphics.width
    @height = Graphics.height
   
    case HN_Light::SIMPLIFY
    when 1
      @zoom = 2
    when 2
      @zoom = 4
    else
      @zoom = 1
    end
    @width /= @zoom
    @height /= @zoom
    self.zoom_x = @zoom.to_f
    self.zoom_y = @zoom.to_f
   
    self.bitmap = Bitmap.new(@width, @height)
    self.bitmap.fill_rect(self.bitmap.rect, @@base_color)
    self.blend_type = 2 # 混合型(减算)
    self.z = 500
    self.visible = false
    @light_cache = {}
  end

  # 追加烛光
  def add_light(charactor)
    return if charactor.nil?
    light_type = charactor.light_type
    return if (light_type < 1 or light_type > HN_Light::LIGHTS.size)
    unless @light_cache.key?(light_type)
      @light_cache[light_type] = HN_Light::Light.new(light_type, @zoom)
    end
    light = @light_cache[light_type]

    # 画面外什麽都不做
    if @zoom == 1
      return if (charactor.screen_x < 0  - light.width + light.ox)
      return if (charactor.screen_x > @width + light.ox)
      return if (charactor.screen_y < 0 - light.height + light.oy)
      return if (charactor.screen_y > @height + light.oy)
    else
      return if (charactor.screen_x < 0  - (light.width + light.ox) * @zoom)
      return if (charactor.screen_x > (@width + light.ox)  * @zoom)
      return if (charactor.screen_y < 0 - (light.height + light.oy) * @zoom)
      return if (charactor.screen_y > (@height + light.oy) * @zoom)
    end

    # 动画判定
    if light.cells > 1
      index = (Graphics.frame_count / 4) % light.cells
      rect = Rect.new(index * light.width , 0, light.width, light.height)
    else
      rect = light.bitmap.rect
    end
    if @zoom != 1
      p_x = charactor.screen_x / @zoom - light.ox
      p_y = (charactor.screen_y - 16) / @zoom - light.oy
    else
      p_x = charactor.screen_x - light.ox
      p_y = charactor.screen_y - 16 - light.oy
    end
   
    # 乗算合成(3)
    self.bitmap.blend_blt(p_x, p_y, light.bitmap, rect, 3)
  end

  
  def refresh
    self.bitmap.fill_rect(self.bitmap.rect, @@base_color)
    $game_map.light_events.each do |event|
      next if HN_Light::LIGHTS[event.light_type - 1].nil?
      add_light(event)
    end
    add_light($game_player)
    $game_player.followers.each{|f| add_light(f)}
  end
  
  # 更新
  def update
    super
    @@base_color = Color.new(255,255,255,$game_variables[HN_Light::DARK_OPACITY_VAR])
    refresh()
  end
  
  #--------------------------------------------------------------------------
  # ● 解放
  #--------------------------------------------------------------------------
  def dispose
    self.bitmap.dispose
    @light_cache.values.each do |light|
      light.dispose
    end
    super
  end
end


class Spriteset_Map  
  # 动画判定
  def create_dark
    @dark_sprite = Sprite_Dark.new(@viewport1)
  end

  # 更新黑暗Sprite
  def update_dark
    if (@dark_sprite.visible = $game_switches[HN_Light::DARK_SWITCH])
      @dark_sprite.update
    end
  end

  # 破弃黑暗Sprite
  def dispose_dark
    @dark_sprite.dispose
  end
  
  # 初期化
  alias :_dark__initialize :initialize unless private_method_defined?(:_dark__initialize)
  def initialize
    _dark__initialize()
    create_dark()
    update_dark()
  end
  
  # 更新
  alias :_dark__update :update unless method_defined?(:_dark__update)
  def update
    _dark__update()
    update_dark() if !@dark_sprite.nil? and !@dark_sprite.disposed?
  end
  
  # 结束处理
  alias :_dark__dispose :dispose unless method_defined?(:_dark__dispose)
  def dispose
    dispose_dark()
    _dark__dispose()
  end
end
回复 支持 1 反对 0

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
155
在线时间
31 小时
注册时间
2016-12-30
帖子
13
31
发表于 2017-12-21 23:09:13 | 只看该作者
请问,使用这个脚本,黑暗程度可以在中途更改吗?
比如说在这个房间里面黑暗程度需要(225,225,225),
但去下一个房间要把黑暗程度改为(160,160,160)
请问这样可以实现吗?如果可以,用什么办法呢?
非常感谢!!!
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
313
在线时间
12 小时
注册时间
2016-8-20
帖子
20
30
发表于 2017-11-24 09:33:31 | 只看该作者
可惜只有日文的了
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
25
在线时间
2 小时
注册时间
2017-11-4
帖子
1
29
发表于 2017-11-4 20:43:14 | 只看该作者
什么叫“对变数的操作”?
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
22923
在线时间
8637 小时
注册时间
2011-12-31
帖子
3367
28
 楼主| 发表于 2015-1-26 17:35:53 | 只看该作者
rachelkywong 发表于 2014-5-17 15:26
脚本Bitmap82行: 發生RuntimeError
LoadLibrary:tktk_bitmap

回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-11 04:48

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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