Project1

标题: 请教 (VA烛光系统脚本) 该脚本的写法和刷新问题 [打印本页]

作者: 灯笼菜刀王    时间: 2018-6-19 11:45
标题: 请教 (VA烛光系统脚本) 该脚本的写法和刷新问题
本帖最后由 灯笼菜刀王 于 2018-6-19 15:09 编辑

R叔斑竹的 "VA式灯光脚本" 传送门其中有三个地方这样写

# 初期化
  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

请教下, alias 后面带unless  , 这个是和通常的条件分歧一样么?  但是unless后面的method_defined?并没有定义, 难道它是和 defined?  一样么? 这部分实在无法理解,请前辈指教~~

========================================

实际上碰到的问题 :

咱是想用烛光系统来伪造"火纹的战争迷雾效果",   通过隐藏我方角色视野范围外的敌人来造成视觉上的看不到, 然后用烛光来形成一个可见的范围表示, 感觉这样比全图铺黑块更有气氛也更省FPS, 也更省事~=3=

这部分咱已经实现了, 接下来, 夜战当然要有能提高视野的东东啦, 所以加入了"探照灯" 这个本子们二战最喜欢用的夜战装备, 使用后能增加2格视野(就是火纹的火把啦)。 功能上,咱已经实现了, 但是问题出在:视觉上~ 视野范围变大了,烛光自然要跟着变大不是么?  

咱的设想 : 改变事件的 light_type ,让普通状态下使用 1型, 探照灯状态下使用2型。

普通地图上, 事件这样设置

是有效的, 运行后 烛光原本1型 直接 变成 5型。

但是, ZTBS的地图里, 同样直接改事件本身的light_type就无效。


p 出来的结果显示 light_type确实变成2, 状态也确认附加, 视野范围也增加了, 就是烛光不能像前面普通地图那样直接改变类型。

过程图



最上面那个就是2号烛光的效果, 下面的两个是1号烛光, 光标所在的位置, 敌人在我方的视野外,所以隐藏了行走图
------------------


使用技能, 这个技能引用上面的那个公共事件,  附加状态并改变light_type
-----------------


p 出来了,可以确定 light_type确实是改了
-----------------


=。= 动画还没放完,  视野已经变大了,原本隐藏的敌人显示出来了....
----------------


过程结束, 最后烛光还是没改变。




ZTBS的重命名咱已经都整合到默认里了, 区别就是 in_tactics 的开和关, 所以可以排除ZTBS地图的Spriteset_Map和普通地图不同

所以说, 为什么普通地图改light_type能直接变烛光, ZTBS就不行呢, 是刷新问题还是什么原因呢?  咱尝试过$scene.update ,$game_map. refresh,  $game_map.events[a.event_id].refresh也一样没用= =.....

PS: 如果采用"打开独立开关使用另一页的注释" 这种方法的话, ZTBS地图也是可以直接改变烛光......... 所以这个烛光的刷新机制到底是啥呢?  感觉和最开始咱看不懂的那三个方法有关系吧





作者: soulsaga    时间: 2018-6-19 11:52
unless method_defined?
如果没有定义该方法?
作者: RyanBern    时间: 2018-6-19 20:57
unless 放后面是 ruby 的另一种语法。有相似功能的还有 if 等。使用效果上,以下两个基本效果一样
RUBY 代码复制
  1. expr1 unless expr2
  2.  
  3. unless expr2
  4.   expr1
  5. end

因为第一种写法只有一行,而且可读性也不差,所以有些人更偏向使用它。


method_defined? 是 ruby 内置方法,不是 RGSS1 的特有方法。它的含义如字面,如果方法已经定义就返回真。

写在这里是主要是为了防 F12。因为 F12 并不能做到完全还原程序,已经定义,重命名的方法还留在那。
作者: 灯笼菜刀王    时间: 2018-6-19 21:49
本帖最后由 灯笼菜刀王 于 2018-6-19 21:50 编辑
RyanBern 发表于 2018-6-19 20:57
unless 放后面是 ruby 的另一种语法。有相似功能的还有 if 等。使用效果上,以下两个基本效果一样
expr1 un ...


谢谢R叔指点.  原来 alias 也可以套分歧, 又学到了一招.

下面那个问题咱也搞明白了,

原来是因为game event一直重复读取备注,不停的刷新light_type的关系~

之前一直以为是看不懂的那三个东西捣乱所以没查看其他地方=.=, 先入为主了......




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