Project1

标题: 让金钱窗口的金钱每三位用逗号隔开 [打印本页]

作者: 风清翔    时间: 2015-1-31 23:11
标题: 让金钱窗口的金钱每三位用逗号隔开
LZ鼓捣了几个月的RGSS后,终于开始动手做自己的脚本了。

希望各位可以支持,也多多提出意见。

如图,像这样的让金钱的每三位以逗号隔开,看起来更有条理。
LZ鼓捣了几个小时才弄出来的……是我第一个纯自主非仿照脚本,希望支持。
可能有很多累赘的东西,各位如果有什么意见尽管提。
使用方法:
①新人:在main上按Insert插入空白脚本,然后将该脚本复制进去。
②大神:直接在原Window_Gold中进行修改。

RUBY 代码复制
  1. #==============================================================================
  2. # ■ Window_Gold
  3. #------------------------------------------------------------------------------
  4. #  显示金钱的窗口。 (更有条理)
  5. # By 风中的翔 (第一次做)
  6. #==============================================================================
  7. class Window_Gold < Window_Base
  8.   def initialize
  9.     super(0,0,160,64)
  10.     self.contents=Bitmap.new(width-32,height-32)
  11.     refresh
  12.   end
  13.   def refresh
  14.     self.contents.clear #清除内容
  15.     size=contents.text_size($data_system.words.gold).width #取得金钱宽度
  16.     self.contents.font.color=normal_color
  17.     gold_fenhao
  18.     self.contents.draw_text(4,0,120-size-2,32,@goldshu, 2) #描绘钱数
  19.     self.contents.font.color=system_color
  20.     self.contents.draw_text(124-size,0,size,32,$data_system.words.gold,2) #描绘单位
  21.   end
  22.   def gold_fenhao
  23.     a = $game_party.gold.to_s
  24.     @fenhaoshu = a.size/3
  25.     @fenhaoyu = a.size%3
  26.     @d=[]
  27.     @d_n=0
  28.     a.scan(/./).each {|a| qudu_gold(a) }
  29.     @goldshu=""
  30.     b=0
  31.     while b<@d_n
  32.       if @fenhaoshu==0 #当钱单位个数小于三时
  33.         @goldshu+=@d[b]
  34.         b+=1
  35.       else #当钱单位数大于三时
  36.         if @fenhaoyu !=0 #当钱单位个数不为三位数倍数时
  37.           while @fenhaoyu != 0
  38.            @goldshu+=@d[b]
  39.            b+=1
  40.            @fenhaoyu-=1
  41.           end
  42.          @goldshu+=","
  43.         else #当钱单位个数为三位数倍数时
  44.           d=0
  45.           while d != 3
  46.            @goldshu+=@d[b]
  47.            break if b==@d_n
  48.            b+=1
  49.            d+=1
  50.           end
  51.           @goldshu+="," if b != @d_n
  52.         end
  53.       end
  54.     end
  55.   end
  56.   def qudu_gold(a)
  57.     @d[@d_n]=a
  58.     @d_n+=1
  59.   end
  60. end


作者: RyanBern    时间: 2015-1-31 23:59
本帖最后由 RyanBern 于 2015-2-1 00:06 编辑

支持LZ写脚本,而且顺便回答了XP区的一个问题!
其实可以这样:
RUBY 代码复制
  1. def make_gold_text
  2.   num = $game_party.gold
  3.   output = ""
  4.   while num > 0
  5.     output = "," + output if output != ""
  6.     output = (num % 1000).to_s + output
  7.     num /= 1000
  8.   end
  9.   return output == "" ? "0" : output
  10. end

然后直接调用make_gold_text就好了,能少几行是几行。
作者: 恐惧剑刃    时间: 2015-2-1 06:47
taroxd已经给过方法了。。
sprintf('%03d,%03d,%03d', gold/1000000, gold/1000%1000, gold%1000)

%是固定格式
0用0补位
3是宽度
d使用十进制
(以上参考 F1)


在rgss1中 读取地图文件,计时器都使用到了这种方法!
“一个参数”对应“一个字符组”
是把 gold/1000000 , gold/1000%1000, gold%1000 转化十进制并用0补位 最后返回一个字符串

作者: taroxd    时间: 2015-2-1 07:48
RyanBern 发表于 2015-1-31 23:59
支持LZ写脚本,而且顺便回答了XP区的一个问题!
其实可以这样:
def make_gold_text

关于能少几行是几行的想法我还是挺赞同的

RUBY 代码复制
  1. gold.to_s.reverse.scan(/.{1,3}/).join(',').reverse

作者: 邪月长啸    时间: 2015-2-1 21:36
taroxd 发表于 2015-2-1 07:48
关于能少几行是几行的想法我还是挺赞同的

gold.to_s.reverse.scan(/.{1,3}/).join(',').reverse[/pre] ...

小白请问版主
这句脚本要怎么用
不知道要插在哪个地方
作者: chd114    时间: 2015-2-2 11:25
邪月长啸 发表于 2015-2-1 04:36
小白请问版主
这句脚本要怎么用
不知道要插在哪个地方

当然是在显示gold的地方用
作者: timiesea    时间: 2015-2-3 17:02
感觉好强大啊!我那个脚本好像过时了呢。不过同样是新手,很好!塞点糖以资鼓励!
作者: 舞小朵儿    时间: 2015-7-30 15:08
都是大神~~~




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