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

Project1

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

[已经解决] 请教 (VA烛光系统脚本) 该脚本的写法和刷新问题

[复制链接]

Lv5.捕梦者

梦石
0
星屑
39009
在线时间
5716 小时
注册时间
2006-11-10
帖子
6618
跳转到指定楼层
1
发表于 2018-6-19 11:45:33 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式

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

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

x
本帖最后由 灯笼菜刀王 于 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地图也是可以直接改变烛光......... 所以这个烛光的刷新机制到底是啥呢?  感觉和最开始咱看不懂的那三个方法有关系吧




Lv5.捕梦者

梦石
0
星屑
39009
在线时间
5716 小时
注册时间
2006-11-10
帖子
6618
4
 楼主| 发表于 2018-6-19 21:49:26 | 只看该作者
本帖最后由 灯笼菜刀王 于 2018-6-19 21:50 编辑
RyanBern 发表于 2018-6-19 20:57
unless 放后面是 ruby 的另一种语法。有相似功能的还有 if 等。使用效果上,以下两个基本效果一样
expr1 un ...


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

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

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

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

使用道具 举报

Lv4.逐梦者 (版主)

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

开拓者贵宾剧作品鉴家

3
发表于 2018-6-19 20:57:58 | 只看该作者
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:43

评分

参与人数 1+1 收起 理由
灯笼菜刀王 + 1 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
36367
在线时间
10781 小时
注册时间
2009-3-15
帖子
4813
2
发表于 2018-6-19 11:52:39 | 只看该作者
unless method_defined?
如果没有定义该方法?

点评

加这句是要判定有没有"DLL"吧,有的话调用它的方法制造遮罩,没有的话就用原本的刷新方式。  发表于 2018-6-19 13:37
emmm, 估计这个就是增加的那个DLL里面的方法吧, 那它的意思就是,除了没有定义XXX方法以外的情况都调用新方法,这样到是可以理解了...  发表于 2018-6-19 13:35
private method 就是不公開的方法,使用 private 保留字定義,在這個 private 底下定義的方法都會被設成不公開(除非之後有另外的保留字定義在下方,此時就會逆轉)。   发表于 2018-6-19 12:04
就算你说的对, 但是也不能解释下面我的实际问题嘛, 为什么偏偏就我要用的方法无效,其他随便变化= =  发表于 2018-6-19 12:00
而且三句都不一样哦=。=....  发表于 2018-6-19 11:58

评分

参与人数 1+1 收起 理由
灯笼菜刀王 + 1 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-10 22:01

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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