Project1

标题: 请教关于变量的大小控制······ [打印本页]

作者: 美丽晨露    时间: 2013-8-8 20:19
标题: 请教关于变量的大小控制······
本帖最后由 美丽晨露 于 2013-8-8 22:10 编辑

#--------------------------------------------------------------------------
  # ● 获取力量
  #--------------------------------------------------------------------------
  def str
    n = [[base_str + @str_plus, 1].max, 999].min
    for i in @states
      n *= $data_states.str_rate / 100.0
    end
    n = [[Integer(n), 1].max, 999].min
    return n
  end

#--------------------------------------------------------------------------
  # ● 设置力量
  #     str : 新的力量
  #--------------------------------------------------------------------------
  def str=(str)
    @str_plus += str - self.str
    @str_plus = [[@str_plus, -20].max, 999].min#999
  end

以上是Game_Battler 1内的获取力量的脚本,

我想问能不能用这种方法实现某些变量如以上的获取效果?
PS:
我想要的是变量的获取方法
跟力量的获取方法一样
而不是将力量赋给某个变量
简单的说,就是让某些变量有最大值最小值以及最小的减少量

请问怎么做?
作者: wwwcctvty    时间: 2013-8-8 20:40
你是指$game_Variables[]还是@xxx?
作者: 1095884734    时间: 2013-8-8 20:43
本帖最后由 1095884734 于 2013-8-8 20:44 编辑

    n = [[base_str + @str_plus, 1].max, 999].min
    for i in @states
      n *= $data_states.str_rate / 100.0
    end
    n = [[Integer(n), 1].max, 999].min
    $game_variables[xxx] = n
差不多这意思……
作者: hys111111    时间: 2013-8-8 21:18
本帖最后由 hys111111 于 2013-8-8 21:38 编辑

[attach]178162[/attach]

这样不就可以了吗?

其实那两个def其实相当于attr_accessor :str的,只是这样子获取和直接获取的区别是有上下限。
作者: 美丽晨露    时间: 2013-8-8 21:27
hys111111 发表于 2013-8-8 21:18
这样不就可以了吗?

其实那两个def其实相当于attr_accessor :str的,只是这样子获取和直接获取的区别是 ...

这个不是我说的效果
我想要的是变量的获取方法
跟力量的获取方法一样
而不是将力量赋给某个变量
作者: hys111111    时间: 2013-8-8 21:32
本帖最后由 hys111111 于 2013-8-8 21:35 编辑
  1.   #--------------------------------------------------------------------------
  2.   # ● 获取变量
  3.   #     variable_id : 变量 ID
  4.   #--------------------------------------------------------------------------
  5.   def [](variable_id)
  6.     if variable_id <= 5000 and @data[variable_id] != nil
  7.       return @data[variable_id]
  8.     else
  9.       return 0
  10.     end
  11.   end
  12.   #--------------------------------------------------------------------------
  13.   # ● 设置变量
  14.   #     variable_id : 变量 ID
  15.   #     value       : 变量的值
  16.   #--------------------------------------------------------------------------
  17.   def []=(variable_id, value)
  18.     if variable_id <= 5000
  19.       @data[variable_id] = value
  20.     end
  21.   end
复制代码
话说脚本Game_Variables里面有类似的。
美丽晨露 发表于 2013-8-8 21:27
这个不是我说的效果
我想要的是变量的获取方法
跟力量的获取方法一样

作者: imsy    时间: 2013-8-8 21:38
楼主是不是想说比如$game_actors[x].str是x号角色的力量,
想让一个变量能通过$xxx.yz 的形式读取和写入?
作者: hys111111    时间: 2013-8-8 21:47
你的意思是特定的变量用特殊的方法获取吗?
  1. #----------------------------------------------------------------------------
  2. #  难道不行啊?
  3. #----------------------------------------------------------------------------
  4. class Game_Variables
  5.   #--------------------------------------------------------------------------
  6.   # ● 获取变量
  7.   #     variable_id : 变量 ID
  8.   #--------------------------------------------------------------------------
  9.   def [](variable_id)
  10.     if variable_id <= 5000 and @data[variable_id] != nil
  11.       special_variable_id = []
  12.       special_variable_id = [1,2,3,4]#1、2、3、4号ID特殊方法获取
  13.       if special_variable_id.include?(variable_id)
  14.         # 用特殊方法获取(随便你怎么样获取)
  15.         n = @data[variable_id]
  16.         n = (n / 100).to_i
  17.         n *= 100
  18.         return n
  19.       else
  20.         return @data[variable_id]
  21.       end
  22.     else
  23.       return 0
  24.     end
  25.   end
  26. end
复制代码

作者: 美丽晨露    时间: 2013-8-8 22:11
hys111111 发表于 2013-8-8 21:47
你的意思是特定的变量用特殊的方法获取吗?

差不多的就是这个意思
只不过我想让这些变量简单有最大值最小值
以及最小的减少量
作者: yagami    时间: 2013-8-9 01:47
a=0
b=rand(100)
b=10 if b<10
a+=b
a=50 if a>50
a初始值为0 假设b为随机100的增量 b=10 if b<10 这句话限定了 b的最少值为10
然后a加上b赋给a 然后这句a=50 if a>50 又限定了 a的最大值为50 差不多就这思路


作者: 芯☆淡茹水    时间: 2013-8-9 06:33
本帖最后由 芯☆淡茹水 于 2013-8-9 06:34 编辑

很简单阿,在给变量增加或减少值的地方限定。 比如某变量增加或减少,限定该变量最大值是100,最小值是-100,就接着下面写:某变量 = [[某变量, -100].max, 100].min
作者: 美丽晨露    时间: 2013-8-9 18:01
芯☆淡茹水 发表于 2013-8-9 06:33
很简单阿,在给变量增加或减少值的地方限定。 比如某变量增加或减少,限定该变量最大值是100,最小值是-10 ...

不懂怎么写这段脚本
作者: 芯☆淡茹水    时间: 2013-8-9 18:18
本帖最后由 芯☆淡茹水 于 2013-8-9 18:21 编辑

比如:
  1. #改变变量值的时候
  2. $game_Variables[x] += n
  3. $game_Variables[x] = [[$game_Variables[x], -100].max, 100].min
复制代码
那一段的注释为:X变量 =  X变量与 -100  之间取最大值,然后再与 100 之间取最小值。
这就限定了 X变量的值的范围只能是 -100 与 100 之间。
作者: 美丽晨露    时间: 2013-8-9 19:53
芯☆淡茹水 发表于 2013-8-9 18:18
比如:那一段的注释为:X变量 =  X变量与 -100  之间取最大值,然后再与 100 之间取最小值。
这就限定了 X ...

谢谢啊,请问这段是直接插入到MAIN前吗?

作者: 芯☆淡茹水    时间: 2013-8-9 19:54
你要在哪儿改变变量的值,就加在下面。
作者: 芯☆淡茹水    时间: 2013-8-9 20:04
本帖最后由 芯☆淡茹水 于 2013-8-9 20:07 编辑

像以下两种方式,都行:









作者: 美丽晨露    时间: 2013-8-9 20:17
芯☆淡茹水 发表于 2013-8-9 20:04
像以下两种方式,都行:

谢谢的说,感觉这样做的话······
对我的游戏实在是一个无底洞······
不能用脚本直接判断某变量的数量是否大于限制数?
作者: 芯☆淡茹水    时间: 2013-8-9 21:11
比如局部,要限制 1 到 100 号变量
  1. for i in 1..100
  2.   $game_variables[i] = [[$game_variables[i], -100].max, 100].min
  3. end
复制代码





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