幻想森林

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2946|回复: 14

[原创]100X100物品图标改进版.(仍未完善)

[复制链接]

122

主题

3954

帖子

24万

积分

超级版主

传说中的Bunny坑神~!

Rank: 8Rank: 8

积分
244543

声命组铜赏

发表于 2005-6-1 11:28:54 | 显示全部楼层 |阅读模式
注意,本脚本修改依然保留一个影响视觉的BUG,即在战斗中使用到物品时部分文字会重叠.应该是帮助窗口未消除导致重叠所致.不知如何处理,望高手指教.
在很久很久以前...某D发的脚本,都是靠观察原版的脚本然后修改的...所以...管杀不管埋...=v=

那个不完美版的物品图标脚本,其实说白了,原理是简单到不行...原来默认的物品图标是和物品名写在一起的,因此图标的位置就限制在32X32那么一个小方格里面了.这个做法则是把图片丢到了帮助窗口里,然后任意调整大小位置来显示你所想要的图标.

至于出现问题的原因...更简单.RGSS里定义的帮助窗口总共只有一个却身兼数职,显示提示,显示状态,显示物品,显示特技...真是皆杀的...只要一不小心改了其中一个,后面的全得跟着改.

所以...解决办法就是...要么在一个个出现帮助窗口的地方定义每个窗口的大小...

要么为物品界面独立设计一个帮助窗口...然后再看看其他地方有什么可修改的.

很遗憾的说其实两者工作量可能差不多...所以我还是挑了第二种.

首先...依然是光荣伟大的WINDOW_BASE的修改...增加一个单独显示物品图标的功能.

  #--------------------------------------------------------------------------
  # ● 描绘物品名[这是修改的部分]
  #     item : 物品
  #     x    : 描画目标 X 坐标
  #     y    : 描画目标 Y 坐标
  #--------------------------------------------------------------------------
  def draw_item_name(item, x, y)
    if item == nil
      return
    end
    self.contents.font.color = normal_color
    self.contents.draw_text(x + 28, y, 212, 32, item.name)
  end
end

#-------------------------------------------------
# ● 自定义物品图片[这是增加的部分]
#-------------------------------------------------
def draw_item_picture(item,x,y)
  if item==nil
    return
  end
   bitmap = RPG::Cache.icon(item.icon_name)
    self.contents.blt(x+10, y, bitmap, Rect.new(0, 0, 76, 101))
end

--------------------------某D路还很长分隔线----------------------------------------

接下来,把WINDOW_HELP整个复制下来,然后新建一个脚本贴上.这个新的帮助窗口,就给它起名叫Window_Help_Item好了.反正是新的窗口,可以随便修改.这里我们要做的就是再定义一个函数,用来在这个窗口里显示物品图片.

class Window_Help_Item < Window_Base  #修改这个类的名字

#--------------------------------------------------------------------------
  # ● 初始化对像[这是修改的地方,修改窗口大小]
  #--------------------------------------------------------------------------
  def initialize
    super(0, 0, 640, 132)
    self.contents = Bitmap.new(width - 32, height - 32)
    if $game_temp.in_battle
      self.back_opacity = 160
    end
  end

   #--------------------------------------------------------------------------
  # ● 设置文本[左对齐,并为物品图片预留空位]
  #     text  : 窗口显示的字符串
  #     align : 对齐方式 (0..左对齐、1..中间对齐、2..右对齐)
  #--------------------------------------------------------------------------
  def set_text(text, align = 0)
    # 如果文本和对齐方式的至少一方与上次的不同
    if text != @text or align != @align
      # 再描绘文本
      self.contents.clear
      self.contents.font.color = normal_color
      self.contents.draw_text(0+106, 33, self.width - 40, 32, text, align)
      @text = text
      @align = align
      @actor = nil
    end
    self.visible = true
  end

  #-------------------------------------------------
  # ● 显示物品图片[这是增加的地方]
  #     item : 要显示图片的物品
  #--------------------------------------------------------------------------
def set_picture(item)
   if item != @item
  draw_item_picture(item,0,0)
  @item= nil
  end
    self.visible = true
end


--------------------------某D万里长征走完第一步分隔线----------------------------------------

接下来,一如既往的修改物品界面,装备界面和商店界面.这里给出的是针对100X100图标的相对坐标.

物品界面需要修改的东西...1是物品窗口的大小,

二是在刷新的时候,在帮助窗口里增加显示图标的功能.

class Window_Item < Window_Selectable
  #--------------------------------------------------------------------------
  # ● 初始化对像(修改,改变物品窗口大小和位置)
  #--------------------------------------------------------------------------
  def initialize
    super(0, 132, 640, 348)
    @column_max = 2
    refresh
    self.index = 0
    # 战斗中的情况下将窗口移至中央并将其半透明化
    if $game_temp.in_battle
      self.y = 132
      self.height = 188

      self.back_opacity = 160
    end
  end

#--------------------------------------------------------------------------
  # ● 刷新帮助文本(添加,增加一行显示图标)
  #--------------------------------------------------------------------------
  def update_help
    @help_window.set_text(self.item == nil ? "" : self.item.description)
    @help_window.set_picture(self.item) #这行是增加的
  end

然后我们转移到Scene_Item这一部分来.

这里关联的帮助窗口还是原版的那个...

所以,把这里使用的帮助窗口改为自定义的.

class Scene_Item
  #--------------------------------------------------------------------------
  # ● 主处理
  #--------------------------------------------------------------------------
  def main
    # 生成帮助窗口、物品窗口
    @help_window = Window_Help_Item.new #这里,就是定义使用帮助窗口的地方...
    @item_window = Window_Item.new
    # 关联帮助窗口
    @item_window.help_window = @help_window
    # 生成目标窗口 (设置为不可见・不活动)....以下省略....

[此贴子已经被作者于2005-6-1 11:42:54编辑过]
http://www.nvlmaker.net/
回复

使用道具 举报

122

主题

3954

帖子

24万

积分

超级版主

传说中的Bunny坑神~!

Rank: 8Rank: 8

积分
244543

声命组铜赏

 楼主| 发表于 2005-6-1 11:40:04 | 显示全部楼层
接下来....是装备界面和窗口...每个窗口都要改...就是左边显示人物装备后增加值,右边显示人物目前装备,下面显示可供选择的装备这三个窗口,还有Scene_Equip本身.
class Window_EquipLeft < Window_Base
  #--------------------------------------------------------------------------
  # ● 初始化对像
  #     actor : 角色
  #--------------------------------------------------------------------------
  def initialize(actor)
    super(0, 132, 272, 192)
    self.contents = Bitmap.new(width - 32, height - 32)
    @actor = actor
    refresh
  end
class Window_EquipRight < Window_Selectable
  #--------------------------------------------------------------------------
  # ● 初始化对像
  #     actor : 角色
  #--------------------------------------------------------------------------
  def initialize(actor)
    super(272, 132, 368, 192)
    self.contents = Bitmap.new(width - 32, height - 32)
    @actor = actor
    refresh
    self.index = 0
  end
  #--------------------------------------------------------------------------
  # ● 刷新帮助文本(添加一行显示图标)
  #--------------------------------------------------------------------------
  def update_help
    @help_window.set_text(self.item == nil ? \"\" : self.item.description)
    @help_window.set_picture(self.item)
  end

class Window_EquipItem < Window_Selectable
  #--------------------------------------------------------------------------
  # ● 初始化对像
  #     actor      : 角色
  #     equip_type : 装备部位 (0~3)
  #--------------------------------------------------------------------------
  def initialize(actor, equip_type)
    super(0, 324, 640, 156)
    @actor = actor
    @equip_type = equip_type
    @column_max = 2
    refresh
    self.active = false
    self.index = -1
  end

  #--------------------------------------------------------------------------
  # ● 刷新帮助文本(添加一行显示图标)
  #--------------------------------------------------------------------------
  def update_help
    @help_window.set_text(self.item == nil ? \"\" : self.item.description)
    @help_window.set_picture(self.item)
  end
class Scene_Equip
  #--------------------------------------------------------------------------
  # ● 初始化对像
  #     actor_index : 角色索引
  #     equip_index : 装备索引
  #--------------------------------------------------------------------------
  def initialize(actor_index = 0, equip_index = 0)
    @actor_index = actor_index
    @equip_index = equip_index
  end
  #--------------------------------------------------------------------------
  # ● 主处理
  #--------------------------------------------------------------------------
  def main
    # 获取角色
    @actor = $game_party.actors[@actor_index]
    # 生成窗口
    @help_window = Window_Help_Item.new
    @left_window = Window_EquipLeft.new(@actor)
    @right_window = Window_EquipRight.new(@actor)
    @item_window1 = Window_EquipItem.new(@actor, 0)
    @item_window2 = Window_EquipItem.new(@actor, 1)
    @item_window3 = Window_EquipItem.new(@actor, 2)
    @item_window4 = Window_EquipItem.new(@actor, 3)
    @item_window5 = Window_EquipItem.new(@actor, 4)
    # 关联帮助窗口...下略
http://www.nvlmaker.net/
回复 支持 反对

使用道具 举报

122

主题

3954

帖子

24万

积分

超级版主

传说中的Bunny坑神~!

Rank: 8Rank: 8

积分
244543

声命组铜赏

 楼主| 发表于 2005-6-1 11:48:55 | 显示全部楼层
挪到商店界面...各位辛苦了...

class Window_ShopCommand < Window_Selectable
  #--------------------------------------------------------------------------
  # ● 初始化对像
  #--------------------------------------------------------------------------
  def initialize
    super(0, 132, 480, 64)
    self.contents = Bitmap.new(width - 32, height - 32)
    @item_max = 3
    @column_max = 3
    @commands = [\"购买\", \"卖出\", \"取消\"]
    refresh
    self.index = 0
  end


class Window_ShopNumber < Window_Base
  #--------------------------------------------------------------------------
  # ● 初始化对像
  #--------------------------------------------------------------------------
  def initialize
    super(0, 196, 368, 284)
    self.contents = Bitmap.new(width - 32, height - 32)
    @item = nil
    @max = 1
    @price = 0
    @number = 1
  end

class Window_ShopBuy < Window_Selectable
  #--------------------------------------------------------------------------
  # ● 初始化对像
  #     shop_goods : 商品
  #--------------------------------------------------------------------------
  def initialize(shop_goods)
    super(0, 196, 368, 284) #改过
    @shop_goods = shop_goods
    refresh
    self.index = 0
  end

  #--------------------------------------------------------------------------
  # ● 刷新帮助文本
  #--------------------------------------------------------------------------
  def update_help
    @help_window.set_text(self.item == nil ? \"\" : self.item.description)
    @help_window.set_picture(self.item)
  end

---------------------特别注意分隔线---------------------------------

Window_ShopBuy 81行和83行...是需要删除的.

这是原版显示小图标的部分.当然下面的出售窗口也是如此修改.

    bitmap = RPG::Cache.icon(item.icon_name)
    opacity = self.contents.font.color == normal_color ? 255 : 128
    self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)



class Window_ShopSell < Window_Selectable
  #--------------------------------------------------------------------------
  # ● 初始化对像
  #--------------------------------------------------------------------------
  def initialize
    super(0, 196, 640, 284) #改过
    @column_max = 2
    refresh
    self.index = 0
  end

  #--------------------------------------------------------------------------
  # ● 刷新帮助文本
  #--------------------------------------------------------------------------
  def update_help
    @help_window.set_text(self.item == nil ? \"\" : self.item.description)
    @help_window.set_picture(self.item)
  end

class Window_ShopStatus < Window_Base
  #--------------------------------------------------------------------------
  # ● 初始化对像
  #--------------------------------------------------------------------------
  def initialize
    super(368, 196, 272, 284)
    self.contents = Bitmap.new(width - 32, height - 32)
    @item = nil
    refresh
  end

class Scene_Shop
  #--------------------------------------------------------------------------
  # ● 主处理
  #--------------------------------------------------------------------------
  def main
    # 生成帮助窗口
    @help_window = Window_Help_Item.new #修改过后   # 生成指令窗口
    @command_window = Window_ShopCommand.new
    # 生成金钱窗口
    @gold_window = Window_Gold.new
    @gold_window.x = 480
    @gold_window.y = 132
    # 生成时间窗口
    @dummy_window = Window_Base.new(0, 196, 640, 284)#改过
    # 生成购买窗口..下略....

[此贴子已经被作者于2005-6-1 12:21:38编辑过]
http://www.nvlmaker.net/
回复 支持 反对

使用道具 举报

122

主题

3954

帖子

24万

积分

超级版主

传说中的Bunny坑神~!

Rank: 8Rank: 8

积分
244543

声命组铜赏

 楼主| 发表于 2005-6-1 12:14:40 | 显示全部楼层
扫尾工作开始...
Scene_Battle 3
  #--------------------------------------------------------------------------
  # ● 开始选择敌人
  #--------------------------------------------------------------------------
  def start_enemy_select
    # 生成敌人箭头
    @enemy_arrow = Arrow_Enemy.new(@spriteset.viewport1)
    # 关联帮助窗口
    @help_window = Window_Help.new
    @enemy_arrow.help_window = @help_window
    # 无效化角色指令窗口
    @actor_command_window.active = false
    @actor_command_window.visible = false
  end
  #--------------------------------------------------------------------------
  # ● 开始选择角色
  #--------------------------------------------------------------------------
  def start_actor_select
    # 生成角色箭头
    @actor_arrow = Arrow_Actor.new(@spriteset.viewport2)
    @actor_arrow.index = @actor_index
    # 关联帮助窗口
    @help_window = Window_Help.new
    @actor_arrow.help_window = @help_window
    # 无效化角色指令窗口
    @actor_command_window.active = false
    @actor_command_window.visible = false
  end
  #--------------------------------------------------------------------------
  # ● 开始选择特技
  #--------------------------------------------------------------------------
  def start_skill_select
    # 生成特技窗口
    @skill_window = Window_Skill.new(@active_battler)
    # 关联帮助窗口
    @help_window = Window_Help.new
    @skill_window.help_window = @help_window
    # 无效化角色指令窗口
    @actor_command_window.active = false
    @actor_command_window.visible = false
  end
   #--------------------------------------------------------------------------
  # ● 开始选择物品
  #--------------------------------------------------------------------------
  def start_item_select
    # 生成物品窗口
    @item_window = Window_Item.new
    # 关联帮助窗口
    @help_window = Window_Help_Item.new
    @item_window.help_window = @help_window
    # 无效化角色指令窗口
    @actor_command_window.active = false
    @actor_command_window.visible = false
  end
http://www.nvlmaker.net/
回复 支持 反对

使用道具 举报

122

主题

3954

帖子

24万

积分

超级版主

传说中的Bunny坑神~!

Rank: 8Rank: 8

积分
244543

声命组铜赏

 楼主| 发表于 2005-6-1 12:22:57 | 显示全部楼层
完毕...逃下...[em04]因为改的时候居然忘记加注释...所以不保证百分百不遗漏某个窗口...=v=
[此贴子已经被作者于2005-6-1 12:23:35编辑过]
http://www.nvlmaker.net/
回复 支持 反对

使用道具 举报

3

主题

240

帖子

41850万

积分

⑥精研

GF转意~心喜!

积分
418502561
QQ
发表于 2005-6-2 05:09:59 | 显示全部楼层
[em01]不好意思~有没有效果的图
YEAH!!!女朋友~又和我说话了....真高兴(心里想:向我这么帅那是当然的)
回复 支持 反对

使用道具 举报

122

主题

3954

帖子

24万

积分

超级版主

传说中的Bunny坑神~!

Rank: 8Rank: 8

积分
244543

声命组铜赏

 楼主| 发表于 2005-6-2 09:42:03 | 显示全部楼层
http://www.nvlmaker.net/
回复 支持 反对

使用道具 举报

7

主题

249

帖子

2413

积分

⑥精研

积分
2413

地图奨铜赏

发表于 2005-6-2 10:21:03 | 显示全部楼层
不错哦,学习
回复 支持 反对

使用道具 举报

1

主题

11

帖子

644

积分

⑤进阶

积分
644
发表于 2005-6-2 20:28:43 | 显示全部楼层
真的,不可以用吗?好象试试啊

不过还是尊重你,我没有用啊,等你说可以用,我在用
回复 支持 反对

使用道具 举报

3

主题

240

帖子

41850万

积分

⑥精研

GF转意~心喜!

积分
418502561
QQ
发表于 2005-6-3 07:31:31 | 显示全部楼层
[em03]好强!这样的化,可以做一个华丽的物品介绍
YEAH!!!女朋友~又和我说话了....真高兴(心里想:向我这么帅那是当然的)
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|幻想森林

GMT+8, 2025-6-21 06:34 , Processed in 0.013511 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表