Project1

标题: RMVA]】对系统脚本 pop={}用法的困惑? [打印本页]

作者: alianlord    时间: 2020-7-18 15:10
标题: RMVA]】对系统脚本 pop={}用法的困惑?
#==============================================================================
# ■ Window_Base
#------------------------------------------------------------------------------
#  游戏中所有窗口的父类
#==============================================================================

class Window_Base < Window



#--------------------------------------------------------------------------
  # ● 绘制带有控制符的文本内容
  #--------------------------------------------------------------------------
  def draw_text_ex(x, y, text)
    reset_font_settings
    text = convert_escape_characters(text)
    pos = {:x => x, :y => y, :new_x => x, :height => calc_line_height(text)}
    process_character(text.slice!(0, 1), text, pos) until text.empty?
  end

#--------------------------------------------------------------------------
  # ● 文字的处理
  #     c    : 文字
  #     text : 绘制处理中的字符串缓存(字符串可能会被修改)
  #    pos  : 绘制位置 {:x, :y, :new_x, :height}
  #--------------------------------------------------------------------------

我的疑问是,pop 是绘制位置,为什么是一个四个元素的哈希表能决定绘制位置。有这用法吗?这里一定得是哈希表吗?
作者: MCCF    时间: 2020-7-18 16:26
首先Ruby的传参对于对象是引用传递,也就是说,我们可以在process_character的内部修改外部pos的值,这点很重要。
然后,为了智能处理每个字符,VA会分别处理每个字符,然后对这个字符的处理完毕之后,如果这个字符不是控制符(已经被绘制了),就会通过修改引用的pos移动下一个字符的绘制位置,否则多个字符岂不重叠了(
所以利用这个方法,使得pos不断变化,而每次传入的pos也就不同,从而实现逐字符绘制的效果。
作者: alianlord    时间: 2020-7-18 17:22
MCCF 发表于 2020-7-18 16:26
首先Ruby的传参对于对象是引用传递,也就是说,我们可以在process_character的内部修改外部pos的值,这点很 ...

大大的回答,好评!!!

VxAce 帮助文件没写,差评!!!
作者: 百里_飞柳    时间: 2020-7-18 20:32
我墙裂批判这种写法,因为它直接限制死了可以修改pos的方式,必须要逐级方法都传入才能获取到,这根本不利于写扩展()


作者: alianlord    时间: 2020-7-18 21:53
百里_飞柳 发表于 2020-7-18 20:32
我墙裂批判这种写法,因为它直接限制死了可以修改pos的方式,必须要逐级方法都传入才能获取到,这根本不利 ...

不明觉历 = { 听起来很历害,但是完全不明白所以的高深课题。}




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