查看: 5082|回复: 13

[已经解决] 关于灯光脚本

[复制链接]
梦石
0
星屑
392
在线时间
52 小时
注册时间
2018-1-25
回帖
24
发表于 2019-2-28 20:20:27 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 筱叶子 于 2019-2-28 20:21 编辑

[pre lang="ruby" line="01"]#==============================================================================
# ■ 灯光脚本 for VA 版本1.0.0
#     12.14.2012
#------------------------------------------------------------------------------
#  脚本修改: dujian15
#  脚本制作: Kylock (For XP 版本 by Near Fantastica)
#==============================================================================


# ■ 灯光脚本 for VX 版本1.1.1
#     5.21.2008
#------------------------------------------------------------------------------
#  脚本制作: Kylock (For XP 版本 by Near Fantastica)
#==============================================================================
#   如果您想要启用脚本,请在需要灯光效果的事件添加一个注释.
#   打开开关将禁用灯光效果,启用效果前会检查开关,如果已经添加注释但是开关开启,那么将会停止效果.
#   译者的话:因为发现脚本有一些问题,所以是有改动过的,如果改的不对,请M我QQ或者留言.谢谢
#
#==============================================================================
# ● 更新日志
#------------------------------------------------------------------------------
# 1.0 - 建立最初版本
# 1.1 - 添加了新的效果: LIGHT2, TORCH, TORCH2
#      - 更改了混合模式(使其看起来更好)
#      - 对FIRE效果增加了红色
# 1.1.1 -非官方更新
#         -解决了效果FIRE 与 TORCH 效果当开关打开时没有消失的问题
#         -简便了开关判断
#==============================================================================
# ● 支持的效果(您可以添加的注释)
#------------------------------------------------------------------------------
#   GROUND - 中等稳定的白光.
#   FIRE   - 伴有轻微的闪烁的红色.
#   LIGHT  - 小型稳定的白光.
#   LIGHT2 -大型稳定的白光.
#   TORCH  - 伴有强烈闪烁的大型稳定的红光.
#   TORCH2 - 伴有中等烁的大型稳定的红光.
#==============================================================================

  $lsig = 100           #开关号


class Spriteset_Map
  alias les_spriteset_map_initalize initialize
  alias les_spriteset_map_dispose dispose
  alias les_spriteset_map_update update
  def initialize
    @light_effects = []
    setup_lights
    les_spriteset_map_initalize
    update
  end
  def dispose
    les_spriteset_map_dispose
    for effect in @light_effects
      effect.light.dispose
    end
    @light_effects = []
  end
  def update
    les_spriteset_map_update
    update_light_effects
  end
  def setup_lights
    for event in $game_map.events.values
      next if event.list == nil
      for i in 0...event.list.size
        if event.list.code == 108 and event.list.parameters == ["GROUND"]
          type = "GROUND"
          light_effects = Light_Effect.new(event,type)
          light_effects.light.zoom_x = 2
          light_effects.light.zoom_y = 2
          light_effects.light.opacity = 100
          @light_effects.push(light_effects)
        end
        if event.list.code == 108 and event.list.parameters == ["FIRE"]
          type = "FIRE"
          light_effects = Light_Effect.new(event,type)
          light_effects.light.zoom_x = 300 / 100.0
          light_effects.light.zoom_y = 300 / 100.0
          light_effects.light.opacity = 100
          @light_effects.push(light_effects)
        end
        if event.list.code == 108 and event.list.parameters == ["LIGHT"]
          type = "LIGHT"
          light_effects = Light_Effect.new(event,type)
          light_effects.light.zoom_x = 1
          light_effects.light.zoom_y = 1
          light_effects.light.opacity = 150
          @light_effects.push(light_effects)
        end
        if event.list.code == 108 and event.list.parameters == ["LIGHT2"]
          type = "LIGHT2"
          light_effects = Light_Effect.new(event,type)
          light_effects.light.zoom_x = 6
          light_effects.light.zoom_y = 6
          light_effects.light.opacity = 150
          @light_effects.push(light_effects)
        end
        if event.list.code == 108 and event.list.parameters == ["TORCH"]
          type = "TORCH"
          light_effects = Light_Effect.new(event,type)
          light_effects.light.zoom_x = 6
          light_effects.light.zoom_y = 6
          light_effects.light.opacity = 150
          @light_effects.push(light_effects)
        end
        if event.list.code == 108 and event.list.parameters == ["TORCH2"]
          type = "TORCH2"
          light_effects = Light_Effect.new(event,type)
          light_effects.light.zoom_x = 6
          light_effects.light.zoom_y = 6
          light_effects.light.opacity = 150
          @light_effects.push(light_effects)
        end
      end
    end
    for effect in @light_effects
      case effect.type
      when "GROUND"
        effect.light.x = (effect.event.screen_x * 8 - 400 - $game_map.display_x) / 8 - 8
        effect.light.y = (effect.event.screen_y * 8 - 400 - $game_map.display_y) / 8 - 36
        effect.light.blend_type = 1
      when "FIRE"
        effect.light.x = (effect.event.screen_x * 8 - 600 - $game_map.display_x) / 8 + rand(6) - 3 - 16
        effect.light.y = (effect.event.screen_y * 8 - 600 - $game_map.display_y) / 8 + rand(6) - 3 - 48
        effect.light.tone = Tone.new(255,-100,-255,   0)
        effect.light.blend_type = 1
      when "LIGHT"
        effect.light.x = (effect.event.screen_x * 8 - 400 - $game_map.display_x) / 8
        effect.light.y = (effect.event.screen_y * 8 - 400 - $game_map.display_y) / 8
        effect.light.blend_type = 1
      when "LIGHT2"
        effect.light.x = (effect.event.screen_x * 8 - 1200 - $game_map.display_x) / 8 - 20
        effect.light.y = (effect.event.screen_y * 8 - 1200 - $game_map.display_y) / 8
        effect.light.blend_type = 1
      when "TORCH"
        effect.light.x = (effect.event.screen_x * 8 - 1200 - $game_map.display_x) / 8 - 20
        effect.light.y = (effect.event.screen_y * 8 - 1200 - $game_map.display_y) / 8
        effect.light.tone = Tone.new(255,-100,-255,   0)
        effect.light.blend_type = 1
      when "TORCH2"
        effect.light.x = (effect.event.screen_x * 8 - 1200 - $game_map.display_x) / 8 - 20
        effect.light.y = (effect.event.screen_y * 8 - 1200 - $game_map.display_y) / 8
        effect.light.tone = Tone.new(255,-100,-255,   0)
        effect.light.blend_type = 1
      end
    end
  end
  def update_light_effects
    if $game_switches[$lsig]
      for effect in @light_effects
        effect.light.visible = false
      end
    else
      for effect in @light_effects

        effect.light.visible = true
      end
    end
    for effect in @light_effects
      case effect.type
      when "GROUND"
        effect.light.x = (effect.event.screen_x * 8 - 400 - $game_map.display_x) / 8 - 8
        effect.light.y = (effect.event.screen_y * 8 - 400 - $game_map.display_y) / 8 - 36
      when "FIRE"
        effect.light.x = (effect.event.screen_x * 8 - 600 - $game_map.display_x) / 8 + rand(6) - 3 - 16
        effect.light.y = (effect.event.screen_y * 8 - 600 - $game_map.display_y) / 8 + rand(6) - 3 - 48
        effect.light.opacity = rand(10) + 90
      when "LIGHT"
        effect.light.x = (-0.25 / 2 * $game_map.display_x) + (effect.event.x * 32) - 15
        effect.light.y = (-0.25 / 2 * $game_map.display_y) + (effect.event.y * 32) - 15
      when "LIGHT2"
        effect.light.x = (effect.event.screen_x * 8 - 1200 - $game_map.display_x) / 8 - 20
        effect.light.y = (effect.event.screen_y * 8 - 1200 - $game_map.display_y) / 8
      when "TORCH"
        effect.light.x = (effect.event.screen_x * 8 - 1200 - $game_map.display_x) / 8 - 20 + rand(20) - 10
        effect.light.y = (effect.event.screen_y * 8 - 1200 - $game_map.display_y) / 8 + rand(20) - 10
        effect.light.opacity = rand(30) + 70
      when "TORCH2"
        effect.light.x = (effect.event.screen_x * 8 - 1200 - $game_map.display_x) / 8 - 20
        effect.light.y = (effect.event.screen_y * 8 - 1200 - $game_map.display_y) / 8
        effect.light.opacity = rand(10) + 90
      end
    end
  end
end

class Light_Effect
  attr_accessor :light
  attr_accessor :event
  attr_accessor :type
  def initialize(event, type)
    @light= Sprite.new
    @light.bitmap = Cache.picture("le.png")
    @light.visible = true
    @light.z = 1000
    @event = event
    @type = type
  end
end
[/pre]

请问插入到脚本目录里以后使用,测试游戏显示第194行错误是什么原因
1.png
梦石
0
星屑
4209
在线时间
1870 小时
注册时间
2010-12-21
回帖
2166
发表于 2019-2-28 20:29:27 | 显示全部楼层
本帖最后由 黄亦天 于 2019-2-28 20:31 编辑

改成@light = Spritr.new试试
是不是在论坛上复制的时候没复制好多了个链接?

啊,还真有个链接,论坛内@会自动变成@别人,这就尴尬了。

点评

因为论坛里有叫light的人所以变成了url吗……  发表于 2019-2-28 21:28
绿坝娘素材库企划

素材库获取方法:暂时中止,需求者私聊。
回复

使用道具 举报

梦石
0
星屑
392
在线时间
52 小时
注册时间
2018-1-25
回帖
24
 楼主| 发表于 2019-2-28 20:58:39 | 显示全部楼层
黄亦天 发表于 2019-2-28 20:29
改成@light = Spritr.new试试
是不是在论坛上复制的时候没复制好多了个链接?

谢谢回复,进去测试是没问题了……但是又遇到新的问题,这个脚本注释里写的使用方法是直接在灯光事件里添加脚本如:LIGHT2吗……我理解它注释里是这个意思,但是进入有灯光的那张地图有新的错误,是不是我脚本的写法有错误,还是脚本有什么地方没改……(图片的名字那行我肯定改了)
4.png
回复

使用道具 举报

梦石
0
星屑
4209
在线时间
1870 小时
注册时间
2010-12-21
回帖
2166
发表于 2019-2-28 21:12:53 | 显示全部楼层
本帖最后由 黄亦天 于 2019-2-28 21:16 编辑
筱叶子 发表于 2019-2-28 20:58
谢谢回复,进去测试是没问题了……但是又遇到新的问题,这个脚本注释里写的使用方法是直接在灯光事件里添 ...


没记错的话是添加一个注释,里面写上LIGHT2之类的。
不是添加事件脚本。

脚本不会用的时候可以考虑找个范例工程。

点评

好了解决了,谢谢,刚才我用过注释但是没效果(用的GROUND)大概是眼瞎了ORZ,又试了一遍用LIGHT2就好啦,亮多了  发表于 2019-2-28 21:21
绿坝娘素材库企划

素材库获取方法:暂时中止,需求者私聊。
回复

使用道具 举报

梦石
0
星屑
392
在线时间
52 小时
注册时间
2018-1-25
回帖
24
 楼主| 发表于 2019-2-28 21:30:16 | 显示全部楼层
黄亦天 发表于 2019-2-28 21:12
没记错的话是添加一个注释,里面写上LIGHT2之类的。
不是添加事件脚本。

等下……我突然发现我知道为啥刚才用注释觉得没效果了,这次测试我是直接在有灯光的这个地图上的打开的游戏……,灯就很亮……但是我如果从另一个地图转到有灯光的这个地图就不亮了……这又是为啥
6.png
这张就是从别的地图上过来的
7.png
这张就是直接在这张地图上打开的
第一张明显就是没效果……
回复

使用道具 举报

梦石
0
星屑
4209
在线时间
1870 小时
注册时间
2010-12-21
回帖
2166
发表于 2019-2-28 21:32:53 | 显示全部楼层
筱叶子 发表于 2019-2-28 21:30
等下……我突然发现我知道为啥刚才用注释觉得没效果了,这次测试我是直接在有灯光的这个地图上的打开的游 ...

迷,是不是调整地图色调的问题?
绿坝娘素材库企划

素材库获取方法:暂时中止,需求者私聊。
回复

使用道具 举报

梦石
0
星屑
392
在线时间
52 小时
注册时间
2018-1-25
回帖
24
 楼主| 发表于 2019-2-28 21:51:04 | 显示全部楼层
本帖最后由 筱叶子 于 2019-2-28 21:54 编辑
黄亦天 发表于 2019-2-28 21:32
迷,是不是调整地图色调的问题?


我先后尝试了在前一张地图设置更改色调(继承到下一张地图),在有灯光的这张地图上更改色调,在前一张地图末尾传送的时候设置传送后更改色调,都没用……色调暗了肯定没问题,但是灯光都没效果(当然测试的时候肯定是要从前一张地图走到有灯光的这张)只有测试的时候直接在本张地图上打开才有效果……我也觉得好迷哈哈哈前边脚本有个开关好像也跟这个没关系吧大概……因为毕竟默认关闭是开启灯光那应该就是正确的不用改ORZ
8.png
事件大概是这样写的↑很简洁,第二行脚本是固定图片位置用的和这个脚本没关系……更改色调就是单纯的改,就一行……就不发出来了……都是并行处理
回复

使用道具 举报

梦石
0
星屑
4209
在线时间
1870 小时
注册时间
2010-12-21
回帖
2166
发表于 2019-2-28 21:56:29 | 显示全部楼层
筱叶子 发表于 2019-2-28 21:51
我先后尝试了在前一张地图设置更改色调(继承到下一张地图),在有灯光的这张地图上更改色调,在前一张地 ...


记得范例里都是把注释放在第一行的,这到底是个什么问题我也没见过。
实在不行就在场景移动前后加个黑屏【淡入淡出
进场景前关掉灯光,进场景后再开启【
绿坝娘素材库企划

素材库获取方法:暂时中止,需求者私聊。
回复

使用道具 举报

梦石
0
星屑
392
在线时间
52 小时
注册时间
2018-1-25
回帖
24
 楼主| 发表于 2019-2-28 23:55:25 | 显示全部楼层
黄亦天 发表于 2019-2-28 21:56
记得范例里都是把注释放在第一行的,这到底是个什么问题我也没见过。
实在不行就在场景移动前后加个黑屏 ...

各种改了还是不行哈哈哈……我突然发现我固定图片也有点问题,不过和这个帖子没关系,是个小问题……毕竟只是个灯芯,我回来发帖再问那个就是了……主要这个灯光脚本散发光芒和灯芯没啥关系我才发现……
于是我随便打开一个新的测试文件做了两张地图,用这个脚本在两张地图上都做了色调更改,效果还是一样哒……直接在第二个范例地图中打开灯光亮亮哒
但是从第一个地图的小路过去就啥也没啦……灯芯显示图片我都给省了(不过图片和固定图片的脚本都在附件里有),就一行注释的事件,色调更改也是都一行,两个地图都有,可以对比。然后就没有其他事件了~
也拿上来发给大佬看一下……我也再研究研究……实在没有解决办法我就去换个脚本,当时用这个主要还是因为灯光种类还挺多的……如果能解决问题,用这个当然最好了……

灯光.zip

1.44 MB, 下载次数: 97

回复

使用道具 举报

梦石
1
星屑
22083
在线时间
4885 小时
注册时间
2014-12-22
回帖
1509

开拓者

发表于 2019-3-1 14:40:53 | 显示全部楼层
本帖最后由 shencao 于 2019-3-1 14:43 编辑

试验了一下,这个脚本效果很奇怪
我在第一个地图设置灯光,换了地图直接继承了上一个地图的灯光,就是说第二个地图上会直接显示的第一个地图的灯光
好像确实只有一开始载入的地图才有灯光,我也不懂为什么
开关控制灯光也是不是开关的值对应控制的,而是开关一次改变一次灯光状态(?大概?)如果我在别的地图把开关打开,在这个地图上还得再开一次才有效果(但是此时开关的值和原来是反的)就感觉很别扭
既然这个脚本是移植的,个人觉得可能脚本本身编写就有点问题?不太适合va用?感觉还是别用了吧囧

灯光可以用普通事件做的。
把灯光做成行走图
灯光事件的“自主移动”里,自定义 移动路线:更改合成方式:加法(不用循环),频率调到最高(如果不是最高,一开始改变为加法的时候会有一个时间差)。改为加法是为了发光效果
如果想要动态灯光,把动态做进行走图里,选择踏步动画就能做动态灯光了
基本上是够用的。
还是想用脚本的话找找其他的吧,记得半生和Khas的灯光脚本都很多人用的,你可以本区搜索一下关键字灯光
回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部