Project1

标题: 萌新求问大佬们一个问题 [打印本页]

作者: ccou33    时间: 2025-5-23 23:27
标题: 萌新求问大佬们一个问题
比如在game_swithes 类中
初始化的@data = [] 指的是@data 变量是表格(我个人理解)那么程序运行时@data这个变量的表格里的东西是从哪里获取的呢?
球球大佬给萌新小弟解答一下,万分感激

作者: ccou33    时间: 2025-5-23 23:33
我不知道这个问题问的对不对,我是在看一个脚本的时候看到作者先是初始化一个变量@current_conductors = [](我的理解是等于一个空表格)但是我在脚本里查找了很多这个变量发现作者好像直接开始对这个表格里的东西开始操作了,我的疑惑是这个本来不是空表格吗,里面什么东西都没有是如何操作的呢?里面的东西是怎么导入或者是获取的?
作者: 和珅    时间: 2025-5-25 22:18
这个我应该能试试回答,拿RPG MAKER XP的Game_swithes类举例
  1. #==============================================================================
  2. # ■ Game_Switches
  3. #------------------------------------------------------------------------------
  4. #  处理开关的类。编入的是类 Array 的外壳。本类的实例请参考
  5. # $game_switches。
  6. #==============================================================================

  7. class Game_Switches
  8.   #--------------------------------------------------------------------------
  9.   # ● 初始化对像
  10.   #--------------------------------------------------------------------------
  11.   def initialize
  12.     @data = []
  13.   end
  14.   #--------------------------------------------------------------------------
  15.   # ● 获取开关
  16.   #     switch_id : 开关 ID
  17.   #--------------------------------------------------------------------------
  18.   def [](switch_id)
  19.     if switch_id <= 5000 and @data[switch_id] != nil
  20.       return @data[switch_id]
  21.     else
  22.       return false
  23.     end
  24.   end
  25.   #--------------------------------------------------------------------------
  26.   # ● 设置开关
  27.   #     switch_id : 开关 ID
  28.   #     value     : ON (true) / OFF (false)
  29.   #--------------------------------------------------------------------------
  30.   def []=(switch_id, value)
  31.     if switch_id <= 5000
  32.       @data[switch_id] = value
  33.     end
  34.   end
  35. end
复制代码


可以看到这段类中定义了一个初始化,一个获取,一个赋值
初始化就是所问的@data = [] ,至于后面怎么赋值的则用到了[]=(switch_id, value)这个方法
由于Ruby是动态数组,不用预分配数组大小,只需要生成一个数组容器就行,可以指定数组位置直接进行赋值
用到的赋值例如Game_Character 2里面行动时的开关变化:
  1. case command.code
  2.         when 27  # 开关 ON
  3.           $game_switches[command.parameters[0]] = true
  4.           $game_map.need_refresh = true
  5.         when 28  # 开关 OFF
  6.           $game_switches[command.parameters[0]] = false
  7.           $game_map.need_refresh = true
复制代码


或者是Interpreter类里面关于开关变化的方法,这里不赘述了
↑能力有限,只能指出是这么回事和为什么可行,不能说明$game_switches在这些变化中的具体原因和作用
作者: ccou33    时间: 2025-5-25 22:56
和珅 发表于 2025-5-25 22:18
这个我应该能试试回答,拿RPG MAKER XP的Game_swithes类举例

感谢大佬辛苦打字回复,你的回复让我打开了思路,万分感谢




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