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

Project1

 找回密码
 注册会员
搜索

一个“较复杂”状态设置的问题

查看数: 1571 | 评论数: 2 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2014-5-21 17:18

正文摘要:

本帖最后由 负零 于 2014-5-21 23:27 编辑 如何实现类似"防御力上升一个数值,这个数值是攻击力与魔法攻击力的差值。" 简单表达就是“防御力提升“攻击力与魔法攻击力的差值”这一数值”。 求大神指点下思路和实 ...

回复

taroxd 发表于 2014-5-21 18:00:32

我还是来个更不规范的写法吧(50是状态id,未测试)
RUBY 代码复制
  1. class Game_BattlerBase
  2.   alias_method :def_without_state, :def
  3.   def def
  4.     def_without_state + (state?(50) ? atk - mat : 0)
  5.   end
  6. end

点评

请你再帮我破个问题...  发表于 2014-5-21 22:54
认可该楼。  发表于 2014-5-21 22:09
谢谢。能同时认可两个答案吗?  发表于 2014-5-21 18:32

评分

参与人数 2星屑 +250 收起 理由
myownroc + 50 再给50凑一张卡吧←_←
fux2 + 200 认可答案

查看全部评分

fux2 发表于 2014-5-21 17:42:46
Game_BattlerBase里面267行有一个定义
  1. def param
复制代码
这个方法会取得某项属性,里面的value就是最终会返回的值,最后一行为矫正,可以先不管。
你是希望这个状态再其他状态之前生效,就写在
  1. value = param_base(param_id) + param_plus(param_id)
复制代码
后面,如果想最后再加上这个属性,就写在
  1. value *= param_rate(param_id) * param_buff_rate(param_id)
复制代码
后面,写什么内容呢,为了系统化一点,我们写成这样
  1. value += param_spec(param_id)
复制代码
这一句加入的位置取决于你上面的选择。
然后在方法后面定义一个新方法。
(这里本来应该在增加和移除buff的方法做修改的,那样才是规范的
但这里图省事,就直接遍历状态了。)
  1.   def param_spec(param_id)
  2.     ret = 0 # 默认返回值
  3.     case param_id
  4.     when 3 # 判断通过这个方法获取的属性是不是def
  5.       if @states.include?(6) #如果拥有6号状态
  6.         ret += (self.mat-self.atk).abs
  7.       end
  8.     end
  9.     return ret
  10.   end
复制代码
加入这个方法之后你可以试试效果了。
另外提醒你一下,这个示范的写法是极其不规范的,
如果你只有少量特殊状态可以凑合用,大量的话还是建议规范写
在battler里面加入buff_exflags数组,add_state里面判断状态来改变buff_flags
往里存的是symbol名,然后写好方法,在获取属性里面遍历buff_exflag一个个call累加即可。

点评

谢谢,我正在研究你的方法,谢谢指导思路。  发表于 2014-5-21 23:03
认可该楼。  发表于 2014-5-21 22:08
真尼玛给跪拜了,1是技术,2是头像。  发表于 2014-5-21 18:23
好神速的回答  发表于 2014-5-21 17:56

评分

参与人数 1梦石 +1 收起 理由
taroxd + 1 大触你好

查看全部评分

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

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

GMT+8, 2024-12-2 08:53

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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