Project1

标题: 建立$开头的全局变量可以像公共变量那样包涵“[]”符号吗? [打印本页]

作者: taeckle    时间: 2019-11-28 22:03
标题: 建立$开头的全局变量可以像公共变量那样包涵“[]”符号吗?
任意一个公共变量里都含有"[]"符号,比如第2号公共变量是这么写的:$game_variables[2]
那咱要想建立一堆以$开头的全局变量可以也包涵“*[]”符号吗?
比如咱这么写可以吗:
$xyz[1]=0
$xyz[2]=0
$xyz[3]=0
$xyz[4]=0
$xyz[5]=0
$xyz[6]=0
$xyz[7]=0


作者: KB.Driver    时间: 2019-11-28 23:19
需要先对变量初始化,可以用数组或散列(哈希表)来达到这样的效果。

# 数组的场合
$xyz = []
$xyz[0] = 0 # [0]
$xyz[2] = 0 # [0, nil, 0]

# 散列的场合
$xyz = {}
$xyz[0] = 0 # {0=>0}
$xyz[2] = 0 # {0=>0, 2=>0}
作者: taeckle    时间: 2019-11-28 23:47
KB.Driver 发表于 2019-11-28 23:19
需要先对变量初始化,可以用数组或散列(哈希表)来达到这样的效果。

# 数组的场合


多谢大神!
那请问我可以直接用一个for循环做吗?
比如上面的例子是否可以这么写呢:
$xyz = []
for i in 1..7
$xyz = 0
end
作者: 寒凌天    时间: 2019-11-29 00:56
taeckle 发表于 2019-11-28 23:47
多谢大神!
那请问我可以直接用一个for循环做吗?
比如上面的例子是否可以这么写呢:


可以,但是你写的有问题

RUBY 代码复制
  1. $xyz = []
  2. for i in 1..7
  3. $xyz[i] = 0        #改了这里
  4. end

也可以写成这样

RUBY 代码复制
  1. $xyz = []
  2. (1..7).each { |i|   $xyz[i] = 0 }

作者: taeckle    时间: 2019-11-29 07:09
KB.Driver 发表于 2019-11-28 23:19
需要先对变量初始化,可以用数组或散列(哈希表)来达到这样的效果。

# 数组的场合

报告大神,
这么建全局变量好像就不能读写或者对全局变量做加减乘除的运算了,关闭游戏后在重新登录游戏就无效了,
请问要怎么存储或者加减乘除全局变量的数值啊?
作者: fux2    时间: 2019-11-29 08:38
taeckle 发表于 2019-11-29 07:09
报告大神,
这么建全局变量好像就不能读写或者对全局变量做加减乘除的运算了,关闭游戏后在重新登录游戏 ...

建议先了解数组的概念,模棱两可的理解大家也没法具体回答你
作者: taeckle    时间: 2019-11-29 08:49
本帖最后由 taeckle 于 2019-11-29 08:52 编辑
fux2 发表于 2019-11-29 08:38
建议先了解数组的概念,模棱两可的理解大家也没法具体回答你


这个问题不仅涉及到数组还有全局变量,
新手入门里关于这两个概念的介绍就那几行,跟咱的问题也没啥关系,
好吧,我把我的问题简化一下:

按照上面这么写关闭游戏再重新登录游戏就报错了,提升就是那个“[]”没定义, 貌似这么搞只能用到程序结束,

该怎么解决呢?
作者: soulsaga    时间: 2019-11-29 10:51
taeckle 发表于 2019-11-29 08:49
这个问题不仅涉及到数组还有全局变量,
新手入门里关于这两个概念的介绍就那几行,跟咱的问题也没啥关系 ...

可以在Game_System新增方法读取..
会保存在存档里的..
又或且把你的变量加到存档读档里..

我觉得第一个方法好..
作者: 寒凌天    时间: 2019-11-29 13:02
taeckle 发表于 2019-11-29 07:09
报告大神,
这么建全局变量好像就不能读写或者对全局变量做加减乘除的运算了,关闭游戏后在重新登录游戏 ...

你把数据存进系统原有的变量就行了啊,这样就会可以保存数据了。
如果你的数据很多也不要紧,把系统原有变量的其中一个声明成数组变量就好了。
https://rpg.blue/thread-479105-1-1.html
这是你曾经发的帖子,5楼我回答了你这种问题,你怕是没认真看
作者: taeckle    时间: 2019-11-29 14:07
寒凌天 发表于 2019-11-29 13:02
你把数据存进系统原有的变量就行了啊,这样就会可以保存数据了。
如果你的数据很多也不要紧,把系统原有 ...

请问下你是怎么存储全局变量的啊,比如现在有个全局变量$xzy, $xyz = 100,
按照你说的方法该怎么存储这个全局变量$xzy呢?
作者: ppspssss    时间: 2019-11-29 14:48
taeckle 发表于 2019-11-29 14:07
请问下你是怎么存储全局变量的啊,比如现在有个全局变量$xzy, $xyz = 100,
按照你说的方法该怎么存储这个 ...

在Scene_Save 里加 Marshal.dump($xyz, file)
在Scene_Load 里加$xyz        = Marshal.load(file)

https://rpg.blue/thread-372202-1-1.html
这个貼子的3楼
作者: ppspssss    时间: 2019-11-29 16:06
taeckle 发表于 2019-11-29 07:09
报告大神,
这么建全局变量好像就不能读写或者对全局变量做加减乘除的运算了,关闭游戏后在重新登录游戏 ...

公共變量本來也是數組,

建議你先p $game_variables  知道一下公共變量"$game_variables"是一什么數組結構

其二,$game_variables[2] 是指公共變量$game_variables中的第3个數值
所以本身是省略了$game_variables=[]这个步驟,
直白說$game_variables是一个數組 , $game_variables[數字]就是數組里的變量
所以极易被誤以為$game_variables[數字]=xx , 其他數組就能$xyz[數字]=xx ,
实際也需要$xyz=[] 才能  使$xyz[數字]=xx 賦值
总之先在遊戏里p $game_variables,也許你会看懂一点

作者: taeckle    时间: 2019-12-2 02:23
ppspssss 发表于 2019-11-29 16:06
公共變量本來也是數組,

建議你先p $game_variables  知道一下公共變量"$game_variables"是一什么數組結 ...

我用了一个很笨的方便但实现目的了!
谢谢你!
作者: RyanBern    时间: 2019-12-15 11:07
发现一个问题,楼主在提问的时候总是加入自己(不正确)的理解来误导回答者。这样其实是非常不好的。

这一贴楼主实际想问为什么使用脚本全局变量不能和游戏中的“变量”(Game_Variable)一样带到存档里,但是一开始你并没有直接指出这个问题,而是使用了“能不能”。“可不可以”这样的问法。以至于回答者答非所问,浪费了双方的时间。


在 Ruby 中,带 $ 开头的变量都是全局变量。游戏中的 $game_variables 也不例外。需要注意的是,$game_variables 实际不是数组,之所以你可以进行 $game_variables[2] 这种操作完全是因为 [] 这个操作被定义在了 Game_Variables 里。除了这种取出元素,修改元素的操作以外,数组还可进行排序,取交集并集等操作,但 $game_variables 不能进行这样的操作。因此我们说 $game_variables 不是数组,而是一个可以取元素修改元素的容器。在脚本中也有相应的注释:实际上是类 Array 的外壳,如果你看过脚本应该有印象。

使用 $xyz = [] 这样的语句才是真正创建了一个数组,创建 7 个变量的数组并将其初始化为 0 可以用以下任意的写法
RUBY 代码复制
  1. $xyz = [0, 0, 0, 0, 0, 0 ,0]
  2. $xyz = Array.new(7){ 0 }

第二种是直接调用了 Array 类的构造函数。创建完之后就可以使用数组 $xyz 了。需要注意的是全局变量和是否放进存档里没有任何关系,哪些变量可以带到下次游戏启动完全是游戏 Scene_Save 里的脚本决定的。
作者: taeckle    时间: 2019-12-17 05:35
RyanBern 发表于 2019-12-15 11:07
发现一个问题,楼主在提问的时候总是加入自己(不正确)的理解来误导回答者。这样其实是非常不好的。

这一 ...

咱提问的时候有时候的确是刻意想用一个封闭式的问法简化问题,
本来是想用这些诸如“是不是”、“能不能”、“可不可以”来节约大家时间的,大家只要回答个是或者不是
就行了,谁知道很多问题比咱想象的要复杂。。。。。。。。。。

作者: 轩辕合流    时间: 2020-2-18 12:34
在储存游戏那里,用一个游戏事件的变量 = 你设置的全局变量
在读取游戏那里,用你设置的全局变量 = 游戏事件的变量

QQ截图20200218123245.png (50.01 KB, 下载次数: 10)

QQ截图20200218123245.png

QQ截图20200218123307.png (50.77 KB, 下载次数: 13)

QQ截图20200218123307.png





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