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

Project1

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

[已经解决] 那个大哥有办法将这个VA烛光移植到XP上啊?

[复制链接]

Lv2.观梦者

梦石
0
星屑
780
在线时间
924 小时
注册时间
2006-6-26
帖子
1529
跳转到指定楼层
发表于 2015-4-24 17:23:15 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式
6星屑
本帖最后由 1243852 于 2015-4-24 21:24 编辑

XP上面,找到了两个烛光系统, 一个是挖黑。 一个叫新烛光。 。   
挖黑不好操控,且bug太多。    比如我想把黑夜和灯光开关分开。先黑夜,然后使用某物品后再灯光。。。这种效果很难实现。
bug ,读档有问题。。 菜单打开再关闭,烛光效果和黑夜效果都消失了。


新烛光,那个太坑了,基本上就是把一张半透明的白色圈圈图,覆盖在角色身上。。角色看起来模糊,却并没有光亮。  





之前打算用VA来做游戏,所以查到过VA的这个日站过来的烛光。


原帖地址:  http://rpg.blue/thread-224000-1-1.html
超好用


但是没找到XP版本的,希望有人能把这个烛光  移植到XP。。 或者找得到XP版本的,发给我,也行,,多谢。


这是原帖的范例工程:
VA烛光.zip (1.63 MB, 下载次数: 326)


这是代码


RUBY 代码复制
  1. =begin
  2.   HN_Light version 1.0.1.0 for VX Ace
  3.         by 半生
  4. [url]http://www.tktkgame.com[/url]
  5.  
  6.   要HN_RG_BITMAP(ver 0.1.2.1以降)
  7.  
  8. 2012/01/08 ver 1.0.1.2
  9.  队列歩行の仲间に対応
  10.  
  11. =end
  12.  
  13. # ----- 在这里设定-----
  14. module HN_Light
  15.   # 简略化0:(精细)~2:(粗暴,负荷轻)
  16.   SIMPLIFY = 1
  17.  
  18.   # 家的烛光类型使用的变量号码
  19.   PLAYER_LIGHT_TYPE = 12
  20.  
  21.   # 队友的烛光类型使用的变量号码
  22.   FOLLOWER_LIGHT_TYPE = 12
  23.  
  24.   # 黑暗判断上使用的开
  25.   DARK_SWITCH = 11
  26.  
  27.   # 烛光事件识别用的正规表达式
  28.   REGEX_LIGHT = /@LIGHT(\d+)/
  29.  
  30.   # 烛光图像的目录
  31.   LIGHT_IMG_DIR = "Graphics/Pictures/"
  32.  
  33.   # 烛光Bitmap设定
  34.   LIGHTS = [
  35.   # [FILENAME, CELLS, ZOOM, OFFSET_Y, HUE]
  36.     ["light5",     1,  1.5,        0,   0],
  37.     ["light2",     1,  1.0,        0,   0],
  38.     ["light3",     1,  0.8,        0,   0],
  39.     ["light4",     1,  1.0,      -16,   0],
  40.     ["light5",     1,  2.0,        0,   0],
  41.     ["light6",     1,  1.0,        0,   0],
  42.     ["light7",     1,  3.0,      -16,   0],
  43.     ["light1",     1,  0.5,        0,   0],
  44.     ["light6",     1,  2.0,        0,   0],
  45.   ]
  46. end
  47. #  ----- 在这里设定 -----
  48.  
  49. module HN_Light
  50.   # 事件mix-in用
  51.   module LightEvent
  52.     attr_reader :light_type
  53.     def initialize
  54.       super()
  55.       @light_type = 0
  56.     end
  57.  
  58.     def check_light
  59.       @light_type = 0
  60.       return if @list.nil?
  61.       @list.each do |command|
  62.         break if @light_type > 0
  63.         if command.code == 108 or command.code == 408
  64.           command.parameters.each do |line|
  65.             if line =~ REGEX_LIGHT
  66.               @light_type = $1.to_i
  67.               break
  68.             end
  69.           end
  70.         end
  71.       end # END @list.each
  72.     end
  73.  
  74.   end # END module LightEvent
  75.  
  76.  
  77.   class Light
  78.     attr_reader :bitmap
  79.     attr_reader :cells
  80.     attr_reader :width
  81.     attr_reader :height
  82.     attr_reader :ox
  83.     attr_reader :oy
  84.     def initialize(light_type, s_zoom = 1)
  85.       light = LIGHTS[light_type - 1]
  86.       if light.nil?
  87.         # 本来不应该来这里
  88.         @bitmap = Bitmap.new(32, 32)
  89.         @cels = 1
  90.         @zoom = 1.0
  91.         @oy = 16
  92.         @ox = 16
  93.         @width  = 32
  94.         @height = 32
  95.       else
  96.         @bitmap = Bitmap.new(LIGHT_IMG_DIR + light[0])
  97.         @bitmap.invert()
  98.         @cells = light[1].to_i
  99.         @cells = 1 if (@cells < 1 or @cells > @bitmap.width)
  100.         @zoom = light[2].to_f
  101.         @zoom = 1.0 if @zoom <= 0.0
  102.         @zoom /= s_zoom
  103.         @width  = @bitmap.width / @cells
  104.         @height = @bitmap.height
  105.  
  106.         # 缩放处理
  107.         if @zoom != 1.0
  108.           new_width  = (@width * @zoom).round
  109.           new_height = (@height * @zoom).round
  110.           if new_width * new_height < 1
  111.             @zoom = 1.0
  112.           else
  113.             @width = new_width
  114.             @height = new_height
  115.             new_bitmap = Bitmap.new(@width * @cells, @height)
  116.             new_bitmap.stretch_blt(new_bitmap.rect,@bitmap, @bitmap.rect)
  117.             @bitmap.dispose
  118.             @bitmap = new_bitmap
  119.           end
  120.         end
  121.         @ox = @width / 2
  122.         @oy = @height / 2 - light[3].to_i / s_zoom
  123.  
  124.         # 色相変换
  125.         if ( (hue = light[4].to_i) != 0)
  126.           @bitmap.hue_change(hue)
  127.         end
  128.       end
  129.     end # End def initialize
  130.  
  131.     # 色调转换
  132.     def dispose
  133.       @bitmap.dispose
  134.       @bitmap = nil
  135.     end
  136.   end
  137.  
  138. end
  139.  
  140. class Game_Event
  141.   include HN_Light::LightEvent
  142.   alias :_hn_light__setup :setup_page unless method_defined?(:_hn_light__setup)
  143.   def setup_page(new_page)
  144.     _hn_light__setup(new_page)
  145.     check_light()
  146.   end
  147. end
  148.  
  149. class Game_Player
  150.   def light_type
  151.     return $game_variables[HN_Light::PLAYER_LIGHT_TYPE]
  152.   end
  153. end
  154.  
  155. class Game_Follower
  156.   def light_type
  157.     return 0 if !self.visible?
  158.     return $game_variables[HN_Light::FOLLOWER_LIGHT_TYPE]
  159.   end
  160. end
  161.  
  162. class Game_Map
  163.   attr_reader :light_events
  164.  
  165.   # 更新烛光事件列表
  166.   def refresh_lights
  167.     @light_events = []
  168.     @events.values.each do |event|
  169.       if (event.light_type > 0)
  170.         @light_events.push(event)
  171.       end
  172.     end
  173.   end
  174.  
  175.   alias :_hn_light__setup_events :setup_events unless method_defined?(:_hn_light__setup_events)
  176.   def setup_events
  177.     _hn_light__setup_events()
  178.     refresh_lights()
  179.   end
  180.  
  181.   alias :_hn_light__refresh :refresh unless method_defined?(:_hn_light__refresh)
  182.   def refresh
  183.     _hn_light__refresh()
  184.     refresh_lights()
  185.   end
  186. end
  187.  
  188. class Sprite_Dark < Sprite
  189.   @@base_color = Color.new(255,255,255)
  190.  
  191.   def initialize(viewport = nil)
  192.     super(viewport)
  193.     @width = Graphics.width
  194.     @height = Graphics.height
  195.  
  196.     case HN_Light::SIMPLIFY
  197.     when 1
  198.       @zoom = 2
  199.     when 2
  200.       @zoom = 4
  201.     else
  202.       @zoom = 1
  203.     end
  204.     @width /= @zoom
  205.     @height /= @zoom
  206.     self.zoom_x = @zoom.to_f
  207.     self.zoom_y = @zoom.to_f
  208.  
  209.     self.bitmap = Bitmap.new(@width, @height)
  210.     self.bitmap.fill_rect(self.bitmap.rect, @@base_color)
  211.     self.blend_type = 2 # 混合型(减算)
  212.     self.z = 500
  213.     self.visible = false
  214.     @light_cache = {}
  215.   end
  216.  
  217.   # 追加烛光
  218.   def add_light(charactor)
  219.     return if charactor.nil?
  220.     light_type = charactor.light_type
  221.     return if (light_type < 1 or light_type > HN_Light::LIGHTS.size)
  222.     unless @light_cache.key?(light_type)
  223.       @light_cache[light_type] = HN_Light::Light.new(light_type, @zoom)
  224.     end
  225.     light = @light_cache[light_type]
  226.  
  227.     # 画面外什麽都不做
  228.     if @zoom == 1
  229.       return if (charactor.screen_x < 0  - light.width + light.ox)
  230.       return if (charactor.screen_x > @width + light.ox)
  231.       return if (charactor.screen_y < 0 - light.height + light.oy)
  232.       return if (charactor.screen_y > @height + light.oy)
  233.     else
  234.       return if (charactor.screen_x < 0  - (light.width + light.ox) * @zoom)
  235.       return if (charactor.screen_x > (@width + light.ox)  * @zoom)
  236.       return if (charactor.screen_y < 0 - (light.height + light.oy) * @zoom)
  237.       return if (charactor.screen_y > (@height + light.oy) * @zoom)
  238.     end
  239.  
  240.     # 动画判定
  241.     if light.cells > 1
  242.       index = (Graphics.frame_count / 4) % light.cells
  243.       rect = Rect.new(index * light.width , 0, light.width, light.height)
  244.     else
  245.       rect = light.bitmap.rect
  246.     end
  247.     if @zoom != 1
  248.       p_x = charactor.screen_x / @zoom - light.ox
  249.       p_y = (charactor.screen_y - 16) / @zoom - light.oy
  250.     else
  251.       p_x = charactor.screen_x - light.ox
  252.       p_y = charactor.screen_y - 16 - light.oy
  253.     end
  254.  
  255.     # 乗算合成(3)
  256.     self.bitmap.blend_blt(p_x, p_y, light.bitmap, rect, 3)
  257.   end
  258.  
  259.  
  260.   def refresh
  261.     self.bitmap.fill_rect(self.bitmap.rect, @@base_color)
  262.     $game_map.light_events.each do |event|
  263.       next if HN_Light::LIGHTS[event.light_type - 1].nil?
  264.       add_light(event)
  265.     end
  266.     add_light($game_player)
  267.     $game_player.followers.each{|f| add_light(f)}
  268.   end
  269.  
  270.   # 更新
  271.   def update
  272.     super
  273.     refresh()
  274.   end
  275.  
  276.   #--------------------------------------------------------------------------
  277.   # ● 解放
  278.   #--------------------------------------------------------------------------
  279.   def dispose
  280.     self.bitmap.dispose
  281.     @light_cache.values.each do |light|
  282.       light.dispose
  283.     end
  284.     super
  285.   end
  286. end
  287.  
  288.  
  289. class Spriteset_Map  
  290.   # 动画判定
  291.   def create_dark
  292.     @dark_sprite = Sprite_Dark.new(@viewport1)
  293.   end
  294.  
  295.   # 更新黑暗Sprite
  296.   def update_dark
  297.     if (@dark_sprite.visible = $game_switches[HN_Light::DARK_SWITCH])
  298.       @dark_sprite.update
  299.     end
  300.   end
  301.  
  302.   # 破弃黑暗Sprite
  303.   def dispose_dark
  304.     @dark_sprite.dispose
  305.   end
  306.  
  307.   # 初期化
  308.   alias :_dark__initialize :initialize unless private_method_defined?(:_dark__initialize)
  309.   def initialize
  310.     _dark__initialize()
  311.     create_dark()
  312.     update_dark()
  313.   end
  314.  
  315.   # 更新
  316.   alias :_dark__update :update unless method_defined?(:_dark__update)
  317.   def update
  318.     _dark__update()
  319.     update_dark() if !@dark_sprite.nil? and !@dark_sprite.disposed?
  320.   end
  321.  
  322.   # 结束处理
  323.   alias :_dark__dispose :dispose unless method_defined?(:_dark__dispose)
  324.   def dispose
  325.     dispose_dark()
  326.     _dark__dispose()
  327.   end
  328. end

最佳答案

查看完整内容

好久不做移植了,不知道这次会不会出错。
我是不是可以签名了?

Lv1.梦旅人

梦石
0
星屑
213
在线时间
84 小时
注册时间
2023-5-23
帖子
12
6
发表于 2023-8-22 11:38:12 | 只看该作者
谢谢大佬

点评

这挖坟挖的,我以为什么新功能练练手……  发表于 2023-8-22 14:11
回复

使用道具 举报

Lv2.观梦者

梦石
0
星屑
780
在线时间
924 小时
注册时间
2006-6-26
帖子
1529
5
 楼主| 发表于 2015-4-25 20:45:03 | 只看该作者
RyanBern 发表于 2015-4-25 11:41
第一个问题,范例中脚本34~45里面是关于脚本烛光设置的,其中ZOOM那一行表示放大率,找到相应的把放大率设 ...

哥,出问题了。。。



你看。。试了很多张地图都是这样,,地图下面的一些地方,就变成亮的了。。看起来像是花屏。

点评

应该是,我改成800后,就没有出现了。  发表于 2015-4-25 21:10
初步判断是z坐标的问题,试着把208行self.z = 500(如果找不到就搜索下)换成更大的数  发表于 2015-4-25 21:02
我是不是可以签名了?
回复

使用道具 举报

Lv4.逐梦者 (版主)

梦石
0
星屑
9532
在线时间
5073 小时
注册时间
2013-6-21
帖子
3580

开拓者贵宾剧作品鉴家

4
发表于 2015-4-25 11:41:02 | 只看该作者
第一个问题,范例中脚本34~45里面是关于脚本烛光设置的,其中ZOOM那一行表示放大率,找到相应的把放大率设置的大一点即可(范例里面使用light5,也就是第一行,放大率为2.5,如果嫌范围不够就把它改大一些)
第二个问题,脚本182行,@@base_color = Color.new(255, 255, 255)那里,改成下面这样:
RUBY 代码复制
  1. @@base_color = Color.new(255, 255, 255, 128)

最后一个128表示通明度,数值越小可见度越高。

点评

好的,多谢  发表于 2015-4-25 12:18
回复

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1232
在线时间
1017 小时
注册时间
2011-4-30
帖子
1516
3
发表于 2015-4-25 06:43:44 手机端发表。 | 只看该作者
va和xp脚本差距很大吗?只要把特殊的方法修改一下应该就可以了吧。脚本嘛,最基础的还是相似的。
回复

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
33435
在线时间
5108 小时
注册时间
2012-11-19
帖子
4878

开拓者

2
发表于 2015-4-24 21:07:32 | 只看该作者
要移植哪个脚本最好贴出来,大哥们都是伸手党。
像这样又要翻网页,又要下工程的,,,
本人对VA的脚本不熟,刚打好酱油。

点评

明白。 多谢提点。  发表于 2015-4-24 21:21
xp vx va mv  va mz 各类型脚本/插件定制
回复

使用道具 举报

Lv4.逐梦者 (版主)

梦石
0
星屑
9532
在线时间
5073 小时
注册时间
2013-6-21
帖子
3580

开拓者贵宾剧作品鉴家

1
发表于 2015-4-24 17:23:16 | 只看该作者
好久不做移植了,不知道这次会不会出错。
Project7.rar (352.78 KB, 下载次数: 138)

点评

看5L回复  发表于 2015-4-25 11:41
你直接告诉我改那一行就是了  发表于 2015-4-25 10:38
不好意思,请教两个问题1、 我想让光线的范围大一些。。2、我不希望黑暗是纯黑暗,我希望肉眼还是能看清的。  发表于 2015-4-25 10:37
哈哈哈哈,真是谢谢了,,这就是我要的效果。不过到时候有没有bug我就不知道了,到时候再麻烦你吧。多谢了。  发表于 2015-4-25 10:15
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-16 10:54

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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