Project1

标题: 战斗总结窗口能否把物品清单变为两列? [打印本页]

作者: 君迁子    时间: 2008-11-14 18:18
标题: 战斗总结窗口能否把物品清单变为两列?
一列拖下来不太美观……而且上面得到经验和金钱那么一长串,右边会空出一大片||||||||| [LINE]1,#dddddd[/LINE]版务信息:本贴由楼主自主结贴~
作者: redant    时间: 2008-11-14 18:40
把框width放大 重新排列呗= =|
作者: 君迁子    时间: 2008-11-14 18:52
框width已经足够大了,现在就是把它变成两列横向列出=v=b

比如得到三个物品,是这样列出的
■■
■□
□□
□□
作者: redant    时间: 2008-11-14 19:01
http://rpg.blue/viewthread.php?tid=109267

就是这么个意思?

每排2个 按物品那样排列?


作者: 君迁子    时间: 2008-11-14 19:08
大概是的,但是不像物品里面会有光标矩形之类……列数需要重新定义?
Window_BattleResult里显示物品的就这几句话=v=bbb
for item in @treasures
    draw_item_name(item, 4, y)
    y += 32
end
作者: redant    时间: 2008-11-14 19:59
光标矩形 是可以删掉的

网速很卡 不打开那个网页了
记得是在刷新光标代码在最下面

[LINE]1,#dddddd[/LINE]

cursor_width = 0
    # 计算光标坐标
    x = @index % @column_max * (cursor_width + 32)
    y = @index / @column_max * 52 - self.oy
    # 更新国标矩形
    self.cursor_rect.set(0, 0, cursor_width, 52)

改成这样 就没光标了
作者: 君迁子    时间: 2008-11-14 20:03
那就是直接参考Windows Item脚本就可以了?去试试=v=b
作者: 天圣的马甲    时间: 2008-11-14 20:11
Window_Battleresult继承的不是selectable的父类,所以Index在那里没有定义的,直接参考物品窗口的部分不太容易照搬。比较容易的方法是按照selectable里面row和column的写法在Window_Base里面自己定义一个新的draw_item方法。

感觉LZ有这方面的基础,就只提供思路不需要费劲去给你试验了吧{/hx}
作者: clap_pl    时间: 2008-11-14 20:31
在 Window_BattleResult 有如下这么多内容

#==============================================================================
# ■ Window_BattleResult
#------------------------------------------------------------------------------
#  战斗结束时、显示获得的 EXP 及金钱的窗口。
#==============================================================================

class Window_BattleResult < Window_Base
  #--------------------------------------------------------------------------
  # ● 初始化对像
  #     exp       : EXP
  #     gold      : 金钱
  #     treasures : 宝物
  #--------------------------------------------------------------------------
  def initialize(exp, gold, treasures)
    @exp = exp
    @gold = gold
    @treasures = treasures
    super(160, 0, 320, @treasures.size * 32 + 64)
    self.contents = Bitmap.new(width - 32, height - 32)
    self.y = 160 - height / 2
    self.back_opacity = 160
    self.visible = false
    refresh
  end
  #--------------------------------------------------------------------------
  # ● 刷新
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    x = 4
    self.contents.font.color = normal_color
    cx = contents.text_size(@exp.to_s).width
    self.contents.draw_text(x, 0, cx, 32, @exp.to_s)
    x += cx + 4
    self.contents.font.color = system_color
    cx = contents.text_size("EXP").width
    self.contents.draw_text(x, 0, 64, 32, "EXP")
    x += cx + 16
    self.contents.font.color = normal_color
    cx = contents.text_size(@gold.to_s).width
    self.contents.draw_text(x, 0, cx, 32, @gold.to_s)
    x += cx + 4
    self.contents.font.color = system_color
    self.contents.draw_text(x, 0, 128, 32, $data_system.words.gold)
    y = 32
    for item in @treasures
      draw_item_name(item, 4, y)
      y += 32
    end
  end
end

################################################


把上面这段改一下
改成如下的样子
彩色的字是改动的部分。



#################################################

class Window_BattleResult < Window_Base
  #--------------------------------------------------------------------------
  # ● 初始化对像
  #     exp       : EXP
  #     gold      : 金钱
  #     treasures : 宝物
  #--------------------------------------------------------------------------
  def initialize(exp, gold, treasures)
    @exp = exp
    @gold = gold
    @treasures = treasures

   #一下条件语句判断得到的物品数是不是双数
   #添加一个变量 len 来表征物品窗口的长度(纵向高度)
   
   if @treasures.size % 2 ==0  
#如果是 则物品窗口的行数为物品数目除以2,例如4个物品就是2行,6个就是3行     
   len = @treasures.size/2 * 32 + 64 #窗口的高就为行数*32再加上64
    else
#如果物品的数目是单数,那么行数就为物品数目除以2再加1,如5个物品就是3行。
    len = (@treasures.size/2 + 1)* 32 + 64#窗口的高就为行数*32再加上64
    end
   
    super(160, 0, 320, len) #用len来定义物品窗口的高
    self.contents = Bitmap.new(width - 32, height - 32)
    self.y = 160 - height / 2
    self.back_opacity = 160
    self.visible = false
    refresh
  end
  #--------------------------------------------------------------------------
  # ● 刷新
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    x = 4
    self.contents.font.color = normal_color
    cx = contents.text_size(@exp.to_s).width
    self.contents.draw_text(x, 0, cx, 32, @exp.to_s)
    x += cx + 4
    self.contents.font.color = system_color
    cx = contents.text_size("EXP").width
    self.contents.draw_text(x, 0, 64, 32, "EXP")
    x += cx + 16
    self.contents.font.color = normal_color
    cx = contents.text_size(@gold.to_s).width
    self.contents.draw_text(x, 0, cx, 32, @gold.to_s)
    x += cx + 4
    self.contents.font.color = system_color
    self.contents.draw_text(x, 0, 128, 32, $data_system.words.gold)
   
    #因为要两列显示 那么要定义显示物品名字的x坐标,初始值是4     
     x = 4
     y = 32
    num_item = 0  #定义一个变量做物品计数的累加器,初始值为0
    for item in @treasures
      draw_item_name(item, x, y)
      #####################双列显示
      if num_item % 2 ==0
      #如果这个num_item 是2的倍数,那么下一个物品要显示在右列
        x+= 140       #右列的x坐标
        num_item += 1 #num_item 计数器自加1
        else      
      #######################
      y += 32 #如果不是2的倍数,那么下一个物品还显示再左列,但纵坐标就要下移
      x = 4          #横坐标为3
      num_item += 1  #num_item 计数器自加1
      end
   
   end
  end
end

彩色部分是改上去的内容 [LINE]1,#dddddd[/LINE]系统信息:本贴由楼主认可为正确答案,66RPG感谢您的热情解答~
作者: 君迁子    时间: 2008-11-14 21:21
谢谢楼上诸位帮忙解答的仁兄{/hx}
就是有一个问题,为啥物品最大只能显示6个?系统的规定??
作者: 天圣的马甲    时间: 2008-11-14 21:24
素滴,Scene_Battle 2里面有说过来着{/hx}
    # 限制宝物数为 6 个
    treasures = treasures[0..5]

作者: 君迁子    时间: 2008-11-14 21:31
第一次知道原来RMXP有这么RP的规定=v=bbb
多谢天圣TvT




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