Project1

标题: 怎么把一个变量当成数组来用 [打印本页]

作者: cjlzbb    时间: 2015-2-7 21:26
标题: 怎么把一个变量当成数组来用
本帖最后由 cjlzbb 于 2015-2-7 21:27 编辑

起因是这样的。我想做一个类似于WOW中戒律牧师的护盾效果,也就是额外的HP
部分技能可以提供护盾,而在计算伤害时先判断护盾的值,大于0则先扣护盾等等。
但是我发现不管是系统本身自带的属性值还是用脚本添加的新属性,都是不能直接进行运算的。好像是直接按人物等级/装备/状态等等的和得出的一个值
只有HP MP TP才是例外。

于是我想到了另一个办法,之前有在一个帖子里看到过可以把变量当做数组来用(好像是VA的帖子)
没错的话,$game_variables[X]就是事件中的变量X吧?$game_variables[X][Y]是代表这个数组中的某一位?
但是我发现在事件的脚本页里写$game_variables[X][Y] = Z的话会出错的说。
但是在脚本里在TP归0那先写 $game_variables[X] = [],然后再在其他地方写 $game_variables[X][Y] = Z 没问题

到底应该怎么做呢

作者: wbsy8241    时间: 2015-2-7 21:34
$game_variables[X]
是一个默认是0的数字 如果你没初始化直接用
$game_variables[X][Y]
当然会报错

你可以在新游戏开始时建个事件
写入 $game_variables[X] = []

并且以后不可对这个X号变量使用”变量操作“的任何功能
只可用 事件脚本的 $game_variables[X][Y] = Z
或脚本中写  $game_variables[X][Y] = Z

作者: cjlzbb    时间: 2015-2-7 21:37
本帖最后由 cjlzbb 于 2015-2-7 21:39 编辑
wbsy8241 发表于 2015-2-7 21:34
$game_variables[X]
是一个默认是0的数字 如果你没初始化直接用
$game_variables[X][Y]


那岂不是不能用数据库中的战斗测试了吗

突然转过弯来了,大不了不用战斗测试直接开个地图丢两个小怪进去就是
回头试试看
作者: wbsy8241    时间: 2015-2-7 21:42
cjlzbb 发表于 2015-2-7 21:37
那岂不是不能用数据库中的战斗测试了吗

突然转过弯来了,大不了不用战斗测试直接开个地图丢两个小怪进去 ...

你会点脚本的话就直接在Game_Variables里写啊
  1. class Game_Variables
  2.   #--------------------------------------------------------------------------
  3.   # ● 初始化
  4.   #--------------------------------------------------------------------------
  5.   def initialize
  6.     @data = []
  7.     @data[15] = [] #像这样
  8.   end
  9. end
复制代码

作者: 三途亚梦    时间: 2015-2-7 22:08
我倒是帮别人写过一个生命护盾的脚本,不知道你是否符合你的需要。


作者: 三途亚梦    时间: 2015-2-8 15:14
如果你只是想知道数组是个大概什么意思,我就粗糙的解说一下。

首先你看数组的初始化是 a = []
这个中括号你可以理解成一个标识,那么我们先假设 a = [1, 2, 3, 4 ,5]
那么我们怎么使用数组中的元素呢?
a[0] 就是 1
a[1] 就是 2
a[X] 中的X代表的就是数组的第X个元素,以为程序是从0为起点的,所以领头的都是0。
你也可以使用a[-1],那么你就会得到 5 也就是素组从倒数第一个数,同理a[-2]就是4了。

如果想要操作数组中个别元素就是
令a[3] = 9 ,那么a就变成了 [1, 2, 3, 9 ,5] 了。

如果是想增加元素呢就是
令a[6] = 7  ,那么a就变成了 [1, 2, 3, 9 ,5 ,nil ,7] 了。
元素可以直接加进去,没有赋值的元素会自动用nil填补。

其实这都是F1帮助中解明的非常清楚的内容,想要学习的话看F1是最快的啦~

然后就是,如果你让一个变量 $game_variables[1] 是一个数组,就是使用$game_variables[1][X]的形式来调用里面的元素。
你不一定要让变量初始化的时候就是空的数组,也就是
$game_variables[1] = []
你可以在调用数组元素前就直接给它赋值成一个数组,比如:
$game_variables[X] = []
$game_variables[X][Y] = Z
也就是执行两句话。

大致明白了吗?如果还有啥疑问就请追问。
作者: chd114    时间: 2015-2-9 10:21
  1. $game_variables[X]=[];$game_variables[X][Y]=Z
复制代码
怎样?




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