Project1

标题: 这段代码的优化方案求解 [打印本页]

作者: 负零    时间: 2013-4-25 10:45
标题: 这段代码的优化方案求解
本帖最后由 负零 于 2013-4-25 11:04 编辑
  1. class Scene_Ectoplasmer
  2. def ectoplasmer
  3.    scence(651,501)
  4.    scence(652,502)
  5.    scence(653,503)
  6.    
  7. end

  8. def scence(skill_id,state_id)
  9.   for i in 1..6
  10.   if $game_actors[i].skill_learn?($data_skills[skill_id])
  11.      $game_actors[i].add_state(state_id)
  12.    else
  13.   end
  14. end
  15. end
  16. end
复制代码
这段代码我怎么看怎么不合理(我自己写的,菜鸟一个)希望有脚本大神能提供一个解决方案,满足需求,最好能照顾一下我,给点关键性的提示。最终目的:授我以渔~谢谢。
作者: 沙漠点灰    时间: 2013-4-25 12:06
这是干什么的= =
任何游戏教程第一章都会提到强烈建议不使用硬编码.建议充分利用数据库.
scence下的for循环
可改为
  1. $game_party.members.each{|i|i.add_state(state_id) if i.skill_learn?($data_skills[skill_id])}
复制代码
当然,只是说说,正文在下面:






我猜lz的意思是学到一个技能后,自动附着一个(或多个??)状态.

1.数据库编写:
我想角色学习了59号技能后,自动附着5,4号这2个状态
于是在59号技能的备注上写上
[习得状态附着:[5,4]]

2.脚本位置查找:
搜索"領悟技能"(我的是繁体版)
找到

  1.   #--------------------------------------------------------------------------
  2.   # ● 領悟技能
  3.   #--------------------------------------------------------------------------
  4.   def learn_skill(skill_id)
  5.     unless skill_learn?($data_skills[skill_id])
  6.       @skills.push(skill_id)
  7.       @skills_used_time[skill_id] = $data_skills[skill_id].mp_cost
  8.       @skills.sort!
  9.     end
  10.   end
复制代码
[习得状态附着:[5,4]]

格式是:
前中括号习得状态附着:状态数组后中括号
需要蓝色的部分
匹配
  1. /.*\[习得状态附着:(.+)\].*/
复制代码
所以修改为:

  1.   #--------------------------------------------------------------------------
  2.   # ● 領悟技能
  3.   #--------------------------------------------------------------------------
  4.   def learn_skill(skill_id)
  5.     unless skill_learn?($data_skills[skill_id])
  6.       @skills.push(skill_id)
  7.       @skills_used_time[skill_id] = $data_skills[skill_id].mp_cost
  8.       if $data_skills[skill_id].note[/.*\[习得状态附着:(.+)\].*/]
  9.         Kernel.eval($1).each{|s|add_state(s)}
  10.       end
  11.       @skills.sort!
  12.     end
  13.   end
复制代码
3.扫尾处理
看看lz的需求了
“遺忘技能”时是不是应该解除附着的"习得状态附着"状态

修改"forget_skill"就行了

作者: 负零    时间: 2013-4-25 17:05
沙漠点灰 发表于 2013-4-25 12:06
这是干什么的= =
任何游戏教程第一章都会提到强烈建议不使用硬编码.建议充分利用数据库.
scence下的for循环 ...

好的,受教受教。回去消化一下,看看效果。




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