适用RGSS的一些有意思的小方法(17/09/14更新)

可以直接把某些方法定义在module Kernel中以便于在任何类里使用。

1. 浮点数保留小数点后指定位数

module Kernel
  def decimal_format(origin = 0, width = 1)
    return format("%.#{width}f", origin.to_f).to_f
  end
end

示例:print decimal_format(123.4567, 2) # => 123.46

2. 对于数字转字符串,用0在前面补齐所需的位数

def zero_front_fix(origin = "1", bit = 2)
    # return sprintf("%0#{bit}d", origin.to_i)
    front = ""
    (bit-origin.length).times do
      front += "0"
    end
    return front + origin.to_s
  end
def zero_front_fix(origin = "1", bit = 3)
    front = ""
    origin = origin.to_s
    length = origin.length
    if length < bit
      front = "0" * (bit - length)
    end
    return front + origin
  end

示例:print zero_front_fix("123", 5) # => "00123"

3. 支持使用Range指定范围的随机数 by 66rpg 晴岚

module Kernel
  alias oldrand rand unless defined?(oldrand)
  def rand(thing = 0)
    case thing
    when Range
      oldrand(thing.end - thing.begin + (thing.exclude_end? ? 0 : 1)) + thing.begin
    else
      oldrand(thing)
    end
  end
end

示例:print rand(2..10) # => 7

4. 方便使用哈希表的小方法

class Hash
  def assign(key, default = nil)
    return (self.has_key?(key) ? self[key] : default)
  end
end

说明:传入一个主键和一个默认值参数,若该哈希表存在指定主键则返回其对应的元素,否则返回给定的默认值
示例:score = @player.assign(:score, 0)

5. 简单判断RGSS的版本,脚本通用化时可用

def rgss_version
  if defined? $TEST
    return 3 if RUBY_VERSION == "1.9.2"
    return 2
  else
    return 1
  end
end

说明:仅有VA定义了RUBY_VERSION这一常量,而VX开始用$TEST代替了XP的$DEBUG

6. 一行脚本解决UTF-8 BOM问题 by 66rpg 英顺的马甲

File.open("test.txt","rb"){|f|p [f.read.unpack("H*").first.sub(/fffe/,"")].pack("H*")}

7. 只在 debug 模式下输出 p(by 66rpg guoxiaomi)

module Kernel
  alias _debug_p p
  def p(*args)
    _debug_p(*args) if $DEBUG
  end
end

说明:请留意$DEBUG是XP的标志,VX/VA请改为$TEST

以上,2017.09.14更新

发布者

ML4455739

宣传站维护团队

发表评论

电子邮件地址不会被公开。