Project1

标题: 普通攻击计数的问题 [打印本页]

作者: wyw838    时间: 2019-4-30 13:10
标题: 普通攻击计数的问题
问题描述如题==想要设定一个技能得凭借普通攻击次数才能发动的角色...但是不知道该怎么对普通攻击进行计数(以变量形式储存计数点)...准确的来说是不知道在哪个地方判定比较好...尝试过的地方有两个..一是在平A伤害计算的函数里先判定攻击者是否为角色,然后读取角色的id再进行计数,二是在光标选择敌人攻击的时候进行判定然后计数...结果发现我的写法貌似都有问题...所以想请教一下各位怎么对普通攻击计数比较好...
作者: 719783572    时间: 2019-5-1 04:58
本帖最后由 719783572 于 2019-5-1 05:44 编辑

想法二毫无疑问错误,如果取消选择敌人的话攻击数还是会增加,这样就可以用选择+取消无限刷攻击次数了。
其次你说是某个角色使用这个技能,如果直接写在脚本和公共变量里的话,所有角色普攻都会加到这个变量里,也毫无疑问错误。
所以如果是指定只有某个角色才会这个技能,那就很好实现,举个例子,假如1号角色才会这个技能,那就只计算1号角色的普攻次数,普攻次数存1号变量,
那就在Game_Battler 3的79行"if hit_result == true"下面添加
RUBY 代码复制下载
  1. if attacker ==  $game_actors[1]
  2. $game_variables[1] += 1
  3. else
  4. return
  5. end

如果是学会这个技能的角色都要计算普攻次数,那你就最好添加一个属性,比如“连击数”,用attr_accessor的方法写入module。
同时自己要想好,如果这个技能是按照每局的普攻次数来计算的话,那你一局战斗结束后还得清空普攻次数这个值。
我随便写段你自己参考。
RUBY 代码复制
  1. module RPG
  2.   class Actor
  3.     def initialize
  4.       @combo = 0
  5.     end
  6.     attr_accessor :combo  ##这个是记录角色普攻次数的属性
  7.   end
  8. end
  9.  
  10. class Game_Actor < Game_Battler
  11.   attr_accessor :combo
  12.   def initialize
  13.    @combo = 0
  14.   end
  15. end

然后是单次普攻计入每个角色的combo值,在Game_Battler 3的79行"if hit_result == true"下面添加
RUBY 代码复制
  1. for i in 0 .. 3
  2. if attacker == $game_party.actors[i]
  3.   $game_party.actors[i].combo += 1
  4. end
  5. end

最后是去Scene_Battle 1的战斗结束那里清空所有角色的combo值。
RUBY 代码复制
  1. for i in 0 .. 3
  2.   $game_party.actors[i].combo = 0
  3. end


作者: 芯☆淡茹水    时间: 2019-5-1 09:26
这样?
  1. #==============================================================================
  2. class Game_Temp
  3.   #--------------------------------------------------------------------------
  4.   def in_battle=(state)
  5.     last_state = @in_battle
  6.     @in_battle = state
  7.     last_state != @in_battle && clear_actors_now_atk_times
  8.   end
  9.   #--------------------------------------------------------------------------
  10.   # 清除角色当前战斗的普攻计数。
  11.   def clear_actors_now_atk_times
  12.     $game_party.actors.each{ |actor| actor.clear_now_normal_atk_times }
  13.   end
  14. end
  15. #==============================================================================
  16. class Game_Battler
  17.   #--------------------------------------------------------------------------
  18.   def normal_atk_data
  19.     return @normal_atk_data || {:now=>0,:total=>0}
  20.   end
  21.   #--------------------------------------------------------------------------
  22.   # 获取战斗对象的普攻计数。
  23.   # type :类型。包括当前战斗中普攻次数与所有战斗普攻次数总数。参数类型=>字符串。
  24.   #       当前战斗中普攻次数:   "now"
  25.   #       所有战斗普攻次数总数: "total"
  26.   # 获取: 某角色(actor)当前战斗中普攻次数 => actor.normal_atk_times("now")
  27.   #       某角色(actor)所有战斗普攻次数总数 => actor.normal_atk_times("total")
  28.   #       敌人同上。
  29.   #--------------------------------------------------------------------------
  30.   def normal_atk_times(type)
  31.     return normal_atk_data[type.to_sym] || 0
  32.   end
  33.   #--------------------------------------------------------------------------
  34.   def normal_atk_on_count
  35.     @normal_atk_data ||= {:now=>0,:total=>0}
  36.     @normal_atk_data.keys.each{ |key| @normal_atk_data[key] += 1 }
  37.   end
  38.   #--------------------------------------------------------------------------
  39.   def clear_now_normal_atk_times
  40.     @normal_atk_data[:now] = 0 if @normal_atk_data
  41.   end
  42.   #--------------------------------------------------------------------------
  43.   alias normal_atk_attack_effect attack_effect
  44.   def attack_effect(attacker)
  45.     attacker.normal_atk_on_count
  46.     return normal_atk_attack_effect(attacker)
  47.   end
  48. end
  49. #==============================================================================
复制代码





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