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

Project1

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

[推荐问答] 正在制作潜力系统,请教一个关于actor_id的调用方法

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
381 小时
注册时间
2012-8-13
帖子
113
跳转到指定楼层
1
发表于 2012-11-9 10:47:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
先说一下游戏的大环境:

力量、敏捷、速度、魔力(下简称四围)的升级曲线为一条直线(不随等级提升)。同时整合了手动加点脚本+装备修炼属性。所以四围的提升完全靠加点和锻炼实现。由于使用了装备修炼属性,理论上所有角色都可以把四围全部培养到999,这样会让角色失去自己的特性。因此我正在制作一个潜力系统。简化一下我目前的做法,思路是每个角色用4个变量来代替该角色的四围的培养上限。具体调用方式为:
力量: $game_variables[@actor.id + (@actor.id - 1) * 3 + 100]
敏捷: $game_variables[@actor.id + (@actor.id - 1) * 3 + 101]
速度: $game_variables[@actor.id + (@actor.id - 1) * 3 + 102]
魔力: $game_variables[@actor.id + (@actor.id - 1) * 3 + 103]

用变量来代替上限的原因是我还做了一个别的养成系统来提升每个人物的四围培养上限(只能提升一定的量,远不会达到四围全999上限)。这个时候找到Game_Battler 1里定义四围的部分:

以力量为例:

RUBY 代码复制
  1. def str
  2.     n = [[base_str + @str_plus, 1].max, 999].min
  3.     for i in @states
  4.       n *= $data_states[i].str_rate / 100.0
  5.     end
  6.     n = [[Integer(n), 1].max, 999].min
  7.     return n
  8. end


将之改为:
RUBY 代码复制
  1. def str
  2.     n_max = $game_variables[@actor.id + (@actor.id - 1) * 3 + 100]
  3.     n = [[base_str + @str_plus, 1].max, n_max].min
  4.       for i in @states
  5.         n *= $data_states[i].str_rate / 100.0
  6.       end
  7.       n = [[Integer(n), 1].max, n_max].min
  8.       return n
  9. end


改完后在测试的时候却发现没有效果。我尝试过把n_max改为一个固定的变量(例如 $game_variables[101]),这样就一切ok。后来我想是不是还有鉴别enemy和actor的区别,所以我又加了一个条件:

RUBY 代码复制
  1. if self.is_a?(Game_Actor)
  2.  
  3. end


结果还是不行。不知道是不是因为Game_Actor < Game_Battler的缘故所以调用actor_id不成功呢?我的脚本功力很弱,所以只好到这里来寻求帮助了。请解疑,如何在Game_Battler 1里调用actor_id呢?

Lv1.梦旅人

梦石
0
星屑
50
在线时间
381 小时
注册时间
2012-8-13
帖子
113
2
 楼主| 发表于 2012-11-9 11:31:29 | 只看该作者
不知道为什么1L的内容显示不出来,我再发一次:

=========================================

先说一下游戏的大环境:

力量、敏捷、速度、魔力(下简称四围)的升级曲线为一条直线(不随等级提升)。同时整合了手动加点脚本+装备修炼属性。所以四围的提升完全靠加点和锻炼实现。由于使用了装备修炼属性,理论上所有角色都可以把四围全部培养到999,这样会让角色失去自己的特性。因此我正在制作一个潜力系统。简化一下我目前的做法,思路是每个角色用4个变量来代替该角色的四围的培养上限。具体调用方式为:
力量: $game_variables[@actor.id + (@actor.id - 1) * 3 + 100]
敏捷: $game_variables[@actor.id + (@actor.id - 1) * 3 + 101]
速度: $game_variables[@actor.id + (@actor.id - 1) * 3 + 102]
魔力: $game_variables[@actor.id + (@actor.id - 1) * 3 + 103]

用变量来代替上限的原因是我还做了一个别的养成系统来提升每个人物的四围培养上限(只能提升一定的量,远不会达到四围全999上限)。这个时候找到Game_Battler 1里定义四围的部分:

以力量为例:

RUBY 代码复制
  1. def str
  2.     n = [[base_str + @str_plus, 1].max, 999].min
  3.     for i in @states
  4.       n *= $data_states[i].str_rate / 100.0
  5.     end
  6.     n = [[Integer(n), 1].max, 999].min
  7.     return n
  8. end


将之改为:
RUBY 代码复制
  1. def str
  2.     n_max = $game_variables[@actor.id + (@actor.id - 1) * 3 + 100]
  3.     n = [[base_str + @str_plus, 1].max, n_max].min
  4.       for i in @states
  5.         n *= $data_states[i].str_rate / 100.0
  6.       end
  7.       n = [[Integer(n), 1].max, n_max].min
  8.       return n
  9. end


改完后在测试的时候却发现没有效果。我尝试过把n_max改为一个固定的变量(例如 $game_variables[101]),这样就一切ok。后来我想是不是还有鉴别enemy和actor的区别,所以我又加了一个条件:

RUBY 代码复制
  1. if self.is_a?(Game_Actor)
  2.  
  3. end


结果还是不行。不知道是不是因为Game_Actor < Game_Battler的缘故所以调用actor_id不成功呢?我的脚本功力很弱,所以只好到这里来寻求帮助了。请解疑,如何在Game_Battler 1里调用actor_id呢?
回复

使用道具 举报

Lv2.观梦者

梦石
0
星屑
280
在线时间
1374 小时
注册时间
2005-10-16
帖子
5113

贵宾

3
发表于 2012-11-9 11:44:34 | 只看该作者
本帖最后由 亿万星辰 于 2012-11-9 11:46 编辑

你可以在Game_Actor中重新定义一下str这个方法,因为你这个最大值限定好像和怪物没有牵连。
同时这样也就不用@actor.id了,直接调用@actor_id这个内部变量即可。
我只个搬答案的
叔叔我已经当爹了~
婚后闪人了……
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
66
在线时间
91 小时
注册时间
2012-8-15
帖子
57
4
发表于 2012-11-9 12:08:27 | 只看该作者
  1. def str
  2.     if self.class == Game_Actor
  3.     #  n_max = $game_variables[@actor.id + (@actor.id - 1) * 3 + 100]   不建议用变量,既然都写代码,再用变量说不过去。
  4.      case @actor.id
  5.           when 1
  6.          n_max = 555
  7.           when 2
  8.             n_max = 666
  9.       end
  10.    end
  11.     n = [[base_str + @str_plus, 1].max, 999].min
  12.     for i in @states
  13.       n *= $data_states[i].str_rate / 100.0
  14.     end
  15.     n = [[Integer(n), 1].max,  n_max].min
  16.     return n
  17.   end
复制代码
如果是我的话,应该加最大限制加在Game_Actor里
然后读取 Game_Actor的方法,这样才是最完美的。
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
381 小时
注册时间
2012-8-13
帖子
113
5
 楼主| 发表于 2012-11-9 17:06:49 | 只看该作者
本帖最后由 tyq4590 于 2012-11-9 21:15 编辑
虾米£浪子 发表于 2012-11-9 16:08
如果是我的话,应该加最大限制加在Game_Actor里
然后读取 Game_Actor的方法,这样才是最完美的。
...


我试着用了这段代码,但是@actor.id还是调用不出来。想试试你说的第二种方法(在Game_Actor里加限制),但是有个疑惑:最大限制是限制base_str + @str_plus的总和,在Game_Actor里貌似只能限制base_str,而@str_plus是在哪里定义的呢?能给一段代码参考一下吗?帮我解决这个问题就认可了。
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
381 小时
注册时间
2012-8-13
帖子
113
6
 楼主| 发表于 2012-11-9 17:19:13 | 只看该作者
虾米£浪子 发表于 2012-11-9 16:08
如果是我的话,应该加最大限制加在Game_Actor里
然后读取 Game_Actor的方法,这样才是最完美的。
...

我试着用了这段代码,但是@actor.id还是调用不出来。想试试你说的第二种方法(在Game_Actor里加限制),但是有个疑惑:最大限制是限制base_str + @str_plus的总和,在Game_Actor里只定义了base_str,因而只能限制base_str,而@str_plus是在哪里定义的呢?又应该如何设限呢?
回复

使用道具 举报

Lv2.观梦者

梦石
0
星屑
280
在线时间
1374 小时
注册时间
2005-10-16
帖子
5113

贵宾

7
发表于 2012-11-9 17:54:43 | 只看该作者
  1. class Game_Actor
  2.   def str
  3.     n_max = $game_variables[@actor_id + (@actor_id - 1) * 3 + 100]
  4.      n = [[base_str + @str_plus, 1].max, n_max].min
  5.       for i in @states
  6.         n *= $data_states[i].str_rate / 100.0
  7.       end
  8.       n = [[Integer(n), 1].max, n_max].min
  9.       return n
  10.   end
  11. end
复制代码

评分

参与人数 1梦石 +2 收起 理由
hys111111 + 2 感谢回答

查看全部评分

我只个搬答案的
叔叔我已经当爹了~
婚后闪人了……
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-12-26 22:44

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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