Project1

标题: 正在制作潜力系统,请教一个关于actor_id的调用方法 [打印本页]

作者: tyq4590    时间: 2012-11-9 10:47
标题: 正在制作潜力系统,请教一个关于actor_id的调用方法
先说一下游戏的大环境:

力量、敏捷、速度、魔力(下简称四围)的升级曲线为一条直线(不随等级提升)。同时整合了手动加点脚本+装备修炼属性。所以四围的提升完全靠加点和锻炼实现。由于使用了装备修炼属性,理论上所有角色都可以把四围全部培养到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呢?dsu_plus_rewardpost_czw
作者: tyq4590    时间: 2012-11-9 11:31
不知道为什么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呢?
作者: 亿万星辰    时间: 2012-11-9 11:44
本帖最后由 亿万星辰 于 2012-11-9 11:46 编辑

你可以在Game_Actor中重新定义一下str这个方法,因为你这个最大值限定好像和怪物没有牵连。
同时这样也就不用@actor.id了,直接调用@actor_id这个内部变量即可。
作者: 虾米£浪子    时间: 2012-11-9 12:08
  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的方法,这样才是最完美的。

作者: tyq4590    时间: 2012-11-9 17:06
本帖最后由 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是在哪里定义的呢?能给一段代码参考一下吗?帮我解决这个问题就认可了。
作者: tyq4590    时间: 2012-11-9 17:19
虾米£浪子 发表于 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是在哪里定义的呢?又应该如何设限呢?
作者: 亿万星辰    时间: 2012-11-9 17:54
  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
复制代码





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