这个类实在是过于冗长,以至于RMXP将其分为三个部分书写。本节我们解析其第一部分,并在解析其整个类之后分析出它是如何使用Game_BattleAction的。

Game_Battle(分割定义一)代码解析

#==============================================================================# ■ Game_Battler (分割定义 1)#------------------------------------------------------------------------------#  处理战斗者的类。这个类作为 Game_Actor 类与 Game_Enemy 类的# 超级类来使用。#==============================================================================class Game_Battler#--------------------------------------------------------------------------# ● 定义实例变量#--------------------------------------------------------------------------attr_reader   :battler_name             # 战斗者 文件名attr_reader   :battler_hue              # 战斗者 色相attr_reader   :hp                       # HPattr_reader   :sp                       # SPattr_reader   :states                   # 状态attr_accessor :hidden                   # 隐藏标志attr_accessor :immortal                 # 不死身标志attr_accessor :damage_pop               # 显示伤害标志attr_accessor :damage                   # 伤害值attr_accessor :critical                 # 会心一击标志attr_accessor :animation_id             # 动画 IDattr_accessor :animation_hit            # 动画 击中标志attr_accessor :white_flash              # 白色屏幕闪烁标志attr_accessor :blink                    # 闪烁标志#--------------------------------------------------------------------------# ● 初始化对像#--------------------------------------------------------------------------def initialize@battler_name = ""@battler_hue = 0@hp = 0@sp = 0@states = []@states_turn = {} #角色状态的维持回合数的集合@maxhp_plus = 0 #以下几个都是基础属性的增加量@maxsp_plus = 0 #@str_plus = 0 #@dex_plus = 0 #@agi_plus = 0 #@int_plus = 0 #@hidden = false@immortal = false@damage_pop = false@damage = nil@critical = false@animation_id = 0@animation_hit = false@white_flash = false@blink = false@current_action = Game_BattleAction.new #战斗中正在发生的行为对象end#--------------------------------------------------------------------------# ● 获取 MaxHP#--------------------------------------------------------------------------def maxhp #暂且不知道base_maxhp是什么,推测是修改前的基础maxhp,应该是从存档文件里读取的 #后来我知道这个是一个方法n = [[base_maxhp + @maxhp_plus, 1].max, 999999].min #让角色hp不超上下限[1,999999]for i in @states #之前我们说过状态是可以叠加的n *= $data_states[i].maxhp_rate / 100.0 #有些状态会对角色的最大hp造成影响(RM本体没有预设这样的状态)endn = [[Integer(n), 1].max, 999999].min #让角色hp不超限return nend#--------------------------------------------------------------------------# ● 获取 MaxSP#--------------------------------------------------------------------------def maxsp #同上,下面都一样n = [[base_maxsp + @maxsp_plus, 0].max, 9999].minfor i in @statesn *= $data_states[i].maxsp_rate / 100.0endn = [[Integer(n), 0].max, 9999].minreturn nend#--------------------------------------------------------------------------# ● 获取力量#--------------------------------------------------------------------------def str #力量等属性值的范围为[1,999]n = [[base_str + @str_plus, 1].max, 999].minfor i in @statesn *= $data_states[i].str_rate / 100.0endn = [[Integer(n), 1].max, 999].minreturn nend#--------------------------------------------------------------------------# ● 获取灵巧#--------------------------------------------------------------------------def dexn = [[base_dex + @dex_plus, 1].max, 999].minfor i in @statesn *= $data_states[i].dex_rate / 100.0endn = [[Integer(n), 1].max, 999].minreturn nend#--------------------------------------------------------------------------# ● 获取速度#--------------------------------------------------------------------------def agin = [[base_agi + @agi_plus, 1].max, 999].minfor i in @statesn *= $data_states[i].agi_rate / 100.0endn = [[Integer(n), 1].max, 999].minreturn nend#--------------------------------------------------------------------------# ● 获取魔力#--------------------------------------------------------------------------def intn = [[base_int + @int_plus, 1].max, 999].minfor i in @statesn *= $data_states[i].int_rate / 100.0endn = [[Integer(n), 1].max, 999].minreturn nend#--------------------------------------------------------------------------# ● 设置 MaxHP#     maxhp : 新的 MaxHP#--------------------------------------------------------------------------def maxhp=(maxhp) #从这里就能明显的看出了,角色基础的属性和后期游戏内设置的属性值是分开存放的@maxhp_plus += maxhp - self.maxhp #求出新值和基础值的差,然后赋给@maxhp_plus,这系列变量应为在基础值上的变化值@maxhp_plus = [[@maxhp_plus, -9999].max, 9999].min #hp与sp的增减能力值范围为[-9999,9999]@hp = [@hp, self.maxhp].minend#--------------------------------------------------------------------------# ● 设置 MaxSP#     maxsp : 新的 MaxSP#--------------------------------------------------------------------------def maxsp=(maxsp) #同上,以下也是@maxsp_plus += maxsp - self.maxsp@maxsp_plus = [[@maxsp_plus, -9999].max, 9999].min@sp = [@sp, self.maxsp].minend#--------------------------------------------------------------------------# ● 设置力量#     str : 新的力量#--------------------------------------------------------------------------def str=(str) @str_plus += str - self.str @str_plus = [[@str_plus, -999].max, 999].min #力量等属性的增减能力值范围为[-999,999]end#--------------------------------------------------------------------------# ● 设置灵巧#     dex : 新的灵巧#--------------------------------------------------------------------------def dex=(dex) @dex_plus += dex - self.dex@dex_plus = [[@dex_plus, -999].max, 999].minend#--------------------------------------------------------------------------# ● 设置速度#     agi : 新的速度#--------------------------------------------------------------------------def agi=(agi)@agi_plus += agi - self.agi@agi_plus = [[@agi_plus, -999].max, 999].minend#--------------------------------------------------------------------------# ● 设置魔力#     int : 新的魔力#--------------------------------------------------------------------------def int=(int)@int_plus += int - self.int@int_plus = [[@int_plus, -999].max, 999].minend#--------------------------------------------------------------------------# ● 获取命中率#--------------------------------------------------------------------------def hitn = 100 #状态正常的状况下命中率为100%for i in @statesn *= $data_states[i].hit_rate / 100.0 #根据状态增减命中率endreturn Integer(n) #百分制取整end#--------------------------------------------------------------------------# ● 获取攻击力#--------------------------------------------------------------------------def atk #原理跟命中率差不多,下同n = base_atkfor i in @statesn *= $data_states[i].atk_rate / 100.0endreturn Integer(n)end#--------------------------------------------------------------------------# ● 获取物理防御#--------------------------------------------------------------------------def pdefn = base_pdeffor i in @statesn *= $data_states[i].pdef_rate / 100.0endreturn Integer(n)end#--------------------------------------------------------------------------# ● 获取魔法防御#--------------------------------------------------------------------------def mdefn = base_mdeffor i in @statesn *= $data_states[i].mdef_rate / 100.0endreturn Integer(n)end#--------------------------------------------------------------------------# ● 获取回避修正#--------------------------------------------------------------------------def eva #回避修正是只增减的n = base_evafor i in @statesn += $data_states[i].evaendreturn nend#--------------------------------------------------------------------------# ● 更改 HP#     hp : 新的 HP#--------------------------------------------------------------------------def hp=(hp)@hp = [[hp, maxhp].min, 0].max #限定取值然后赋值# 解除附加的战斗不能状态for i in 1...$data_states.size #也就是遍历所有状态if $data_states[i].zero_hp #RPG::State.zero_hp,本方法在调用对象中有“当作hp为0”的设定时返回Trueif self.dead? #如果改后的hp是hp为0的情况add_state(i) #增加这个状态elseremove_state(i) #移出这个状态endendendend #既然如此,理论上最好只定义一个“当作hp为0”的战斗不能状态,如果有特殊情况也要把特殊状态放在战斗不能状态的后面#--------------------------------------------------------------------------# ● 更改 SP#     sp : 新的 SP#--------------------------------------------------------------------------def sp=(sp) #同上,但是移除状态判定和修改@sp = [[sp, maxsp].min, 0].maxend#--------------------------------------------------------------------------# ● 全回复#--------------------------------------------------------------------------def recover_all@hp = maxhp #我想了半天这个变量从哪里来,原来是上面定义的方法@sp = maxspfor i in @states.clone #object.clone,此方法返回此对象的克隆对象(浅拷贝)remove_state(i) #移除所有状态endend#--------------------------------------------------------------------------# ● 获取当前的动作#--------------------------------------------------------------------------def current_actionreturn @current_actionend#--------------------------------------------------------------------------# ● 确定动作速度#--------------------------------------------------------------------------def make_action_speed #可以看出每一次行动的速度是有随机性的@current_action.speed = agi + rand(10 + agi / 4) end#--------------------------------------------------------------------------# ● 战斗不能判定#--------------------------------------------------------------------------def dead?return (@hp == 0 and not @immortal) #没有不死身标记而且hp=0end#--------------------------------------------------------------------------# ● 存在判定#--------------------------------------------------------------------------def exist? #之前测试了battler调用的频率,感觉角色死亡之后是不是@hidden置True了,待验证return (not @hidden and (@hp > 0 or @immortal))end#--------------------------------------------------------------------------# ● HP 0 判定#--------------------------------------------------------------------------def hp0? #被@hidden的对象不参与计算,真好return (not @hidden and @hp == 0)end#--------------------------------------------------------------------------# ● 可以输入命令判定#--------------------------------------------------------------------------def inputable? #强制普攻敌人和强制普攻队友、不行动时不能输入命令(也就是选择行动)return (not @hidden and restriction <= 1) #Game_Battler 2.restriction方法,返回状态的限制end#--------------------------------------------------------------------------# ● 可以行动判定#--------------------------------------------------------------------------def movable? #除了不行动状态都可以行动return (not @hidden and restriction < 4)end#--------------------------------------------------------------------------# ● 防御中判定#--------------------------------------------------------------------------def guarding? #参考Game_BattleAction可知这是行为0基本1,也就是防御return (@current_action.kind == 0 and @current_action.basic == 1)end#--------------------------------------------------------------------------# ● 休止中判定#--------------------------------------------------------------------------def resting? #目前不知道什么情况下basic会置3return (@current_action.kind == 0 and @current_action.basic == 3)endend

思考

我之前曾经说过Ruby的方法隐藏括号调用很有歧义不该提倡,但是今天我在思考,定义函数和定义变量都是定义,这样明明更加符合Ruby一切皆对象的思想,倒是反而衬托出我思想的僵化了。

不过说真的,我想了老半天那个maxhp是啥变量了……人傻起来真就没药医- -。

RMXP脚本解析(十):Game_Battler(分割定义一)相关推荐

  1. RMXP脚本解析(十五):Game_Battler(分割定义三)

    目录 前言 Game_Battler(分割定义三)代码解析 第一命中与第二命中 计算公式(真) effective(攻击有效标志)的生效条件 属性修正 对象是Game_Actor类实例的情况 对象是G ...

  2. RMXP脚本解析(二十二):Game_Enemy

    目录 Game_Enemy类代码解析 Game_Enemy类与Game_Troop类 $data_enemy 敌人行动的生成过程 关于z坐标 Game_Enemy类代码解析 #============ ...

  3. ns-3网络仿真(简易脚本解析)

    ns-3简易脚本解析 点对点有线网络(first.cc) 头文件 命名空间 NS_LOG_COMPONENT_DEFINE main()函数中的准备工作 创建网络拓扑 点对点有线网络(first.cc ...

  4. SteamVR脚本解析

    SteamVR各脚本的功能 SteamVR/Scripts/下脚本各功能的实现 Paste_Image.png 1.SteamVR.cs 单例管理类,管理SteamVR程序的运行和终止. 2.Stea ...

  5. 脚本解析photoshop文本属性

    尊重原创,转载请在文首注明出处:http://blog.csdn.net/cai612781/article/details/78072531 在做unity项目中,用到了psd2ngui插件来把ps ...

  6. steamvr自定义按键_SteamVR脚本解析

    SteamVR各脚本的功能 SteamVR/Scripts/下脚本各功能的实现 Paste_Image.png 1.SteamVR.cs 单例管理类,管理SteamVR程序的运行和终止. 2.Stea ...

  7. [转载]SteamVR脚本解析

    Paste_Image.png 1.SteamVR.cs 单例管理类,管理SteamVR程序的运行和终止. 2.SteamVR_Camera.cs 给场景添加一个最基本可运行的SteamVR组. 3. ...

  8. CVPR2020论文解析:实例分割算法

    CVPR2020论文解析:实例分割算法 BlendMask: Top-Down Meets Bottom-Up for Instance Segmentation 论文链接:https://arxiv ...

  9. ps脚本解析psd文本字号

    ps脚本解析psd中文本字号最简单的方法,通过DOM获取:var size = activeDocument.activeLayer.textItem.size; 但是当该文本被拉伸过后,DOM解析出 ...

最新文章

  1. 每日一皮:经历过的Bug修复过程...
  2. mysql 账号权限过期_Mysql用户忘记密码及密码过期问题的处理方法
  3. python if语句多个条件-Python 条件语句(if..elif..else)
  4. RN返回navigation方法
  5. oracle存储过程实现根据已有数据批量更新另一批数据
  6. java获取mysql时间格式化_Java与mysql的时间格式化问题,获取时间的上下午
  7. aptana php 调试,aptana 3 + xdebug php
  8. Android实训案例(四)——关于Game,2048方块的设计,逻辑,实现,编写,加上色彩,分数等深度剖析开发过程!...
  9. python对象之间的关系
  10. Ajax技术复习---狂神笔记
  11. 微博云原生运维如何快速应对热点流量峰值?
  12. 视频行为识别检测综述
  13. 【暑假集训】F1方程式冠军
  14. java写俄罗斯方块难吗_用JAVA写的俄罗斯方块
  15. Android 11 PackageManagerService源码分析(一):PMS启动的总体流程
  16. 有什么拍照识别植物的软件?建议收藏这几个软件
  17. 自定义微信小程序tabBar组件上边框的颜色
  18. linux文件系统自动挂载点,Linux fstab自动挂载分区教程
  19. 【数组】深析 “数组名称”
  20. 活久见!Linux命令行居然也可以用来查看图像?

热门文章

  1. 带你了解OSI七层模型,很实用
  2. 低代码可视化报表-积木报表,JimuReport v1.5.2版本发布
  3. 【JS】JS数组添加元素的三种方法
  4. 无线传感网-定位技术1
  5. Java的serialVersionUID
  6. 02 css实现文字下划线动画效果
  7. 《C++开发工程师岗位必备知识点一》
  8. 司铭宇讲师:上海某科技企业《从技术专才走向管理精英》内训项目
  9. Adaboost原理
  10. 冬奥会必备102项赛事中英文术语