Project1

标题: 这样的脚本如果很多的话应该写哪里比较好? [打印本页]

作者: 幻耶    时间: 2009-7-6 14:58
标题: 这样的脚本如果很多的话应该写哪里比较好?
以下脚本是计算角色当前装备的武器中如果附带风属性,对不同抗性的敌人计算累加伤害后代入36号变量。想请教一下这段脚本添加在哪里比较好?或者只能加在Scene_Map的 def update 中?
因为做的ARPG,类似伤害判断脚本会写很多,包括其它的附带属性和防具等等,全部写在Scene_Map的 def update 中是不是对游戏速度影响很大?



   # 风属性武器的伤害累加
   if $game_party.actors[0].weapon_id != 0 and $data_weapons[$game_party.actors[0].weapon_id].element_set.include?(6)
     wf = 10
   else
     wf = 0
   end
  # 镶嵌所添加的风属性
   if $game_party.actors[0].weapon_id != 0 and $data_weapons[$game_party.actors[0].weapon_id].element_set.include?(91)
     wfk1 = 2
   elsif $game_party.actors[0].weapon_id != 0 and $data_weapons[$game_party.actors[0].weapon_id].element_set.include?(92)
     wfk1 = 4
   elsif $game_party.actors[0].weapon_id != 0 and $data_weapons[$game_party.actors[0].weapon_id].element_set.include?(93)
     wfk1 = 6
   elsif $game_party.actors[0].weapon_id != 0 and $data_weapons[$game_party.actors[0].weapon_id].element_set.include?(94)
     wfk1 = 8
   else
     wfk1 = 0
   end
      
   for i in 1..20
     if $game_variables[5] == i and $game_map.events[i].name.include?("f")
       $game_variables[36] = (wf.to_i+wfk1.to_i+wfk2.to_i+wfk3.to_i)/2
       break
     elsif $game_variables[5] == i and $game_map.events[i].name.include?("h")
       $game_variables[36] = 0
       break
     elsif $game_variables[5] == i and $game_map.events[i].name.include?("t")
       $game_variables[36] = (wf.to_i+wfk1.to_i+wfk2.to_i+wfk3.to_i)*2
       break
     else
       $game_variables[36] = wf.to_i+wfk1.to_i
     end
   end
作者: 囧之达人    时间: 2009-7-6 14:59
RUBY是一行一行执行的,所以你写哪里都没关系
作者: ONEWateR    时间: 2009-7-6 15:03
估计会~
  1. 类似伤害判断脚本会写很多
复制代码
这个在攻击之后判定就行了,用def xx即可~
判断攻击放在update里即可~ 然后在执行 xx 的内容~
作者: 幻耶    时间: 2009-7-6 15:13
本帖最后由 幻耶 于 2009-7-6 15:14 编辑

定义一个"攻击"?那如果身上有属性防御的防具,是不是还要定义一个"挨打"?

def update
。。。。。
def attack
这里写什么啊?
end
。。。。。。
作者: ONEWateR    时间: 2009-7-6 15:26
其实有一些是没必要不断的刷新的~
def 攻击

攻击的内容,包括“伤害判断脚本会写很多,包括其它的附带属性和防具等等”

end

然后在 map 的 update 加上 攻击的判断

if Input.trigger?(Input::C)
攻击
end
作者: 幻耶    时间: 2009-7-6 15:32
攻击的内容,比如我就写上面那一段风属性的伤害判断,直接贴进去就可以了么?还需要添加些什么内容?
作者: ONEWateR    时间: 2009-7-6 15:43
攻击的内容,比如我就写上面那一段风属性的伤害判断,直接贴进去就可以了么?还需要添加些什么内容?
幻耶 发表于 2009-7-6 15:32


嗯嗯,可以的,如果语法没错的话~
至于还需添加什么内容,这是要根据你自己的要求~
小弟以上仅作参考~
作者: 幻耶    时间: 2009-7-6 15:56
本帖最后由 幻耶 于 2009-7-6 16:00 编辑

如果只计算风属性的伤害,我写成这样可以么?def 和end之间的东西就避免了不断的刷新?直到按了C才刷新?

def update
。。。。。
def attack
   # 风属性武器的伤害累加
   if $game_party.actors[0].weapon_id != 0 and $data_weapons[$game_party.actors[0].weapon_id].element_set.include?(6)
     wf = 10
   else
     wf = 0
   end
  # 镶嵌所添加的风属性
   if $game_party.actors[0].weapon_id != 0 and $data_weapons[$game_party.actors[0].weapon_id].element_set.include?(91)
     wfk1 = 2
   elsif $game_party.actors[0].weapon_id != 0 and $data_weapons[$game_party.actors[0].weapon_id].element_set.include?(92)
     wfk1 = 4
   elsif $game_party.actors[0].weapon_id != 0 and $data_weapons[$game_party.actors[0].weapon_id].element_set.include?(93)
     wfk1 = 6
   elsif $game_party.actors[0].weapon_id != 0 and $data_weapons[$game_party.actors[0].weapon_id].element_set.include?(94)
     wfk1 = 8
   else
     wfk1 = 0
   end
      
   for i in 1..20
     if $game_variables[5] == i and $game_map.events.name.include?("f")
       $game_variables[36] = (wf.to_i+wfk1.to_i+wfk2.to_i+wfk3.to_i)/2
       break
     elsif $game_variables[5] == i and $game_map.events.name.include?("h")
       $game_variables[36] = 0
       break
     elsif $game_variables[5] == i and $game_map.events.name.include?("t")
       $game_variables[36] = (wf.to_i+wfk1.to_i+wfk2.to_i+wfk3.to_i)*2
       break
     else
       $game_variables[36] = wf.to_i+wfk1.to_i
     end
   end
end



if Input.trigger?(Input::C)
attack
end



。。。。。。
作者: IamI    时间: 2009-7-6 16:01
你不能把def attack拿到外面去嘛……= =方法套方法让人看得眼花缭乱
应该是这样
def update
######
if Input.trigger?(Input::C)
attack
end
end
def attack
#####
end

当然现在的写法也能顺利通过编译并达到你要的效果
作者: ONEWateR    时间: 2009-7-6 16:02
本帖最后由 ONEWateR 于 2009-7-6 16:04 编辑

貌似有点问题 = =
应该是

def update
…………
…………
if Input.trigger?(Input::C)
attack
end

end


def attack
   # 风属性武器的伤害累加
   if $game_party.actors[0].weapon_id != 0 and $data_weapons[$game_party.actors[0].weapon_id].element_set.include?(6)
     wf = 10
   else
     wf = 0
   end
  # 镶嵌所添加的风属性
   if $game_party.actors[0].weapon_id != 0 and $data_weapons[$game_party.actors[0].weapon_id].element_set.include?(91)
     wfk1 = 2
   elsif $game_party.actors[0].weapon_id != 0 and $data_weapons[$game_party.actors[0].weapon_id].element_set.include?(92)
     wfk1 = 4
   elsif $game_party.actors[0].weapon_id != 0 and $data_weapons[$game_party.actors[0].weapon_id].element_set.include?(93)
     wfk1 = 6
   elsif $game_party.actors[0].weapon_id != 0 and $data_weapons[$game_party.actors[0].weapon_id].element_set.include?(94)
     wfk1 = 8
   else
     wfk1 = 0
   end
      
   for i in 1..20
     if $game_variables[5] == i and $game_map.events.name.include?("f")
       $game_variables[36] = (wf.to_i+wfk1.to_i+wfk2.to_i+wfk3.to_i)/2
       break
     elsif $game_variables[5] == i and $game_map.events.name.include?("h")
       $game_variables[36] = 0
       break
     elsif $game_variables[5] == i and $game_map.events.name.include?("t")
       $game_variables[36] = (wf.to_i+wfk1.to_i+wfk2.to_i+wfk3.to_i)*2
       break
     else
       $game_variables[36] = wf.to_i+wfk1.to_i
     end
   end
end

其实这样跟公共事件原理差不多~
attack 就相当于 呼出 attack内容的公共事件
而if Input.trigger?(Input::C) ………… 就相当于并行处理
作者: 幻耶    时间: 2009-7-6 16:08
学到了。。
if Input.trigger?(Input::C)就相当于按ENTER键?如果我的攻击键设置的是键盘上的”S“,那应该写成什么哦
作者: ONEWateR    时间: 2009-7-6 16:20
if Input.trigger?(Input::Y)
具体查看game.exe的f1




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