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

Project1

 找回密码
 注册会员
搜索
查看: 1743|回复: 11
打印 上一主题 下一主题

[已经解决] 这样的脚本如果很多的话应该写哪里比较好?

 关闭 [复制链接]

Lv4.逐梦者

梦石
3
星屑
6420
在线时间
1131 小时
注册时间
2007-12-26
帖子
2402
跳转到指定楼层
1
发表于 2009-7-6 14:58:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
以下脚本是计算角色当前装备的武器中如果附带风属性,对不同抗性的敌人计算累加伤害后代入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
囡囚囨囚囨図囨囧

Lv1.梦旅人

梦石
0
星屑
50
在线时间
47 小时
注册时间
2009-5-10
帖子
41
2
发表于 2009-7-6 14:59:15 | 只看该作者
RUBY是一行一行执行的,所以你写哪里都没关系
回复 支持 反对

使用道具 举报

Lv1.梦旅人

B

梦石
0
星屑
50
在线时间
26 小时
注册时间
2007-8-26
帖子
3693
3
发表于 2009-7-6 15:03:40 | 只看该作者
估计会~
  1. 类似伤害判断脚本会写很多
复制代码
这个在攻击之后判定就行了,用def xx即可~
判断攻击放在update里即可~ 然后在执行 xx 的内容~
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
3
星屑
6420
在线时间
1131 小时
注册时间
2007-12-26
帖子
2402
4
 楼主| 发表于 2009-7-6 15:13:53 | 只看该作者
本帖最后由 幻耶 于 2009-7-6 15:14 编辑

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

def update
。。。。。
def attack
这里写什么啊?
end
。。。。。。
囡囚囨囚囨図囨囧
回复 支持 反对

使用道具 举报

Lv1.梦旅人

B

梦石
0
星屑
50
在线时间
26 小时
注册时间
2007-8-26
帖子
3693
5
发表于 2009-7-6 15:26:30 | 只看该作者
其实有一些是没必要不断的刷新的~
def 攻击

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

end

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

if Input.trigger?(Input::C)
攻击
end
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
3
星屑
6420
在线时间
1131 小时
注册时间
2007-12-26
帖子
2402
6
 楼主| 发表于 2009-7-6 15:32:38 | 只看该作者
攻击的内容,比如我就写上面那一段风属性的伤害判断,直接贴进去就可以了么?还需要添加些什么内容?
囡囚囨囚囨図囨囧
回复 支持 反对

使用道具 举报

Lv1.梦旅人

B

梦石
0
星屑
50
在线时间
26 小时
注册时间
2007-8-26
帖子
3693
7
发表于 2009-7-6 15:43:13 | 只看该作者
攻击的内容,比如我就写上面那一段风属性的伤害判断,直接贴进去就可以了么?还需要添加些什么内容?
幻耶 发表于 2009-7-6 15:32


嗯嗯,可以的,如果语法没错的话~
至于还需添加什么内容,这是要根据你自己的要求~
小弟以上仅作参考~
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
3
星屑
6420
在线时间
1131 小时
注册时间
2007-12-26
帖子
2402
8
 楼主| 发表于 2009-7-6 15:56:51 | 只看该作者
本帖最后由 幻耶 于 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



。。。。。。
囡囚囨囚囨図囨囧
回复 支持 反对

使用道具 举报

Lv3.寻梦者

孤独守望

梦石
0
星屑
3137
在线时间
1535 小时
注册时间
2006-10-16
帖子
4321

开拓者贵宾

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

当然现在的写法也能顺利通过编译并达到你要的效果
菩提本非树,明镜本非台。回头自望路漫漫。不求姻缘,但求再见。
本来无一物,何处惹尘埃。风打浪吹雨不来。荒庭遍野,扶摇难接。
不知道多久更新一次的博客
回复 支持 反对

使用道具 举报

Lv1.梦旅人

B

梦石
0
星屑
50
在线时间
26 小时
注册时间
2007-8-26
帖子
3693
10
发表于 2009-7-6 16:02:55 | 只看该作者
本帖最后由 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) ………… 就相当于并行处理
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

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

GMT+8, 2025-1-27 08:05

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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