赞 | 45 |
VIP | 0 |
好人卡 | 0 |
积分 | 146 |
经验 | 0 |
最后登录 | 2024-11-11 |
在线时间 | 2192 小时 |
Lv4.逐梦者
- 梦石
- 0
- 星屑
- 14576
- 在线时间
- 2192 小时
- 注册时间
- 2019-1-24
- 帖子
- 1123
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
本帖最后由 miantouchi 于 2022-10-7 15:36 编辑
很久没有发新帖子了,最近重拾XP部分,发现以前很多地方都忘记了。
所以,今天和大家一起读下大家常见的一段代码。感谢之前菜刀大大的指点。
以下内容大部分是菜刀大大的讲解加上个人在细节上面的完善,
算是给我们这些小白的学习笔记了。
首先贴上今天要研究的代码部分如下图。
我一直以来对于这一段算是一知半解,没有理解透彻。注释里面写的判断状态是否为full?
我开始从字面理解,判断状态是否为 full,状态是否是满的?
为了能详解了解,我们先看下这段代码里面一些重要组成部分。
我们发现,
@states是数组类型、
@states_turn是哈希表
hold_trun回合经过后 auto_release_prob % 的概率解除。
首先我们看下第一段代码
def state?(state_id)
# 如果符合被附加的状态的条件就返回 ture
return @states.include?(state_id)
end
从这里看出来传入了状态ID,返回@states里面是否包含了这个状态ID,包含则返回true反之则false。至此第一段解读完毕。
下面看下第二段代码如下:
@states_turn是哈希表格式,但是就是保存数据格式是什么样的还不是太清楚,下面我测试下看看。
我让怪物使用火炎,状态变化里面加上 毒、睡眠、呆滞这3种状态。
上图加入打印出内容。
由此可见,@states_turn是按 状态=>持续回合 这样的方式保存
那 @states_turn[state_id] == -1 在什么时候等于-1呢?
全局搜索下。
然后我们再看看force是什么东西,什么时候变成ture的。继续全局搜索。
我们发现add_state和remove_state这两个方法用到了force,最后发现用于装备自动状态处。
也就是说:当持续回合 == -1 的时候, 这个-1是用于装备赋予的状态, 也就是自动状态, 此时不会重复赋予, 因此不会中状态
下面看下第三段代码如下:
return @states_turn[state_id] == $data_states[state_id].hold_turn
持续回合 == 设定的回合数时, 返回 true, 也就是,不能中状态
最后总结下,3种情况。
1、当没有中该状态的时候, 返回false, 也就是, 此时就可以中状态
2、当持续回合 == -1 的时候, 这个-1是用于装备赋予的状态, 也就是自动状态, 此时不会重复赋予, 因此不会中状态
3、持续回合 == 设定的回合数时, 返回 true, 也就是,不能中状态
所以得到个结果, 什么情况下可以中状态, 没有中该状态的时候, 以及中了该状态, 但是不是刚刚中(也就是持续回
合不等于设定回合)的时候, 就可以中。
知道这些个人感觉还是有用的,最起码知道内部数据构造及原理,并且可以改造他,其他的大家发挥想象了。
预计下次还是读关于这部分的,个人感觉教程也不能写的太细,太细反而啰嗦,看得迷糊。
|
|