设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 5047|回复: 8
打印 上一主题 下一主题

[RMVA发布] 【教程向】小优教你扩充装备栏+换装系统(更新到Step3)

[复制链接]

Lv1.梦旅人

梦石
0
星屑
117
在线时间
35 小时
注册时间
2014-4-21
帖子
6
1
发表于 2015-3-19 23:34:19 | 显示全部楼层
本帖最后由 nevets 于 2015-3-19 23:49 编辑

关于扩展装备slot,这里是我的一个解决方案,理论上可以插入任意数量的slot,只要在一开始slot名称定义数组里加进去就能自动识别。不过有个问题没解决,就是在装备列表里,超出画面的项就不会画出来,是个系统原来就没考虑的小bug,尚未解决,其他都OK了。

ps。话说楼主还真是懒啊,开个贴,把我拉进这个坑,看到关键地方,居然说偷个懒就糊弄过去了。。。我那个都那个了你就给我看这个?

RUBY 代码复制
  1. #这里是我的一个解决方案,理论上可以插入任意数量的slot,
  2. #只要在一开始slot名称定义数组里加进去就能自动识别。
  3. #不过有个问题没解决,就是在装备列表里,超出画面的项就不会画出来,
  4. #是个系统原来就没考虑的小bug,尚未解决,其他都OK了。
  5.  
  6. #使用方法:在数据库中装备的note里,加入这么一行:“<装备位置 x>”,
  7. #其中x就是装备的slot id,这个id就是Vocab::ESlots数组里的序号。
  8.  
  9.  
  10. module Vocab
  11.   # 替换系统装备部位,随意增加多少个都行
  12.   ESlots = ["0武器",
  13.             "1盾牌",
  14.             "2头盔",
  15.             "3铠甲",
  16.             "4饰品",
  17.             "5外套",
  18.             "6裤子",
  19.             "7内衣",
  20.             "8内裤",
  21.             "9鞋子"
  22.   ]
  23. end
  24.  
  25. module DataManager
  26.   #--------------------------------------------------------------------------
  27.   # ● 修改$data_armors
  28.   #--------------------------------------------------------------------------
  29.   def self.modify_data_armors
  30.     $data_armors.each_with_index {|armor,index|
  31.       if armor
  32.         armor.note =~ /<装备位置\W*\s+(\d+)>/
  33.         armor.etype_id = $1.to_i if $1
  34.       end
  35.  
  36.     }
  37.   end
  38.   #--------------------------------------------------------------------------
  39.   # ● 修改self.init
  40.   #--------------------------------------------------------------------------
  41.   def self.init
  42.     @last_savefile_index = 0
  43.     load_database
  44.     create_game_objects
  45.     setup_battle_test if $BTEST
  46.     modify_data_armors # 修改数据
  47.   end
  48. end
  49.  
  50. class Game_Actor < Game_Battler
  51.   #--------------------------------------------------------------------------
  52.   # ● 获取装备栏的数组
  53.   #--------------------------------------------------------------------------
  54.   def equip_slots
  55.     return Array.new(Vocab::ESlots.size) {|i| i==1 ? 0 : i} if dual_wield? # 双持武器
  56.     return Array.new(Vocab::ESlots.size) {|i| i} # 普通
  57.   end
  58. end
  59.  
  60.  
  61. class Window_EquipSlot < Window_Selectable
  62.   #--------------------------------------------------------------------------
  63.   # ● 获取列数
  64.   #--------------------------------------------------------------------------
  65.   def col_max
  66.     return 2
  67.   end
  68.   #--------------------------------------------------------------------------
  69.   # ● 获取项目数
  70.   #--------------------------------------------------------------------------
  71.   def item_max
  72.     return (get_item_slots.size)
  73.   end
  74.   #--------------------------------------------------------------------------
  75.   # ● 获取装备slot数组(跳过不可装备的slot)
  76.   #--------------------------------------------------------------------------
  77.   def get_item_slots
  78.     arr = []
  79.     if @actor
  80.       for i in ([email]0..@actor.equip_slots.size[/email]-1)
  81.         if enable?(i);  arr.push(i);  end
  82.       end
  83.     end #if @actor
  84.     return arr
  85.   end
  86.   #--------------------------------------------------------------------------
  87.   # ● 获取装备栏的名字
  88.   #--------------------------------------------------------------------------
  89.   def slot_name(index)
  90.     if @actor
  91.       return Vocab::ESlots[index]
  92.     else; return ""
  93.     end
  94.   end
  95.   #--------------------------------------------------------------------------
  96.   # ● 绘制所有项目
  97.   #--------------------------------------------------------------------------
  98.   def draw_all_items
  99.     return unless @actor
  100.     item_max.times {|index|
  101.       i = get_item_slots[index]
  102.       rect = item_rect_for_text(index)
  103. #~       draw_icon(168, rect.x, rect.y) #画slot的图标
  104.       change_color(system_color)
  105.       draw_text(rect.x, rect.y, 48, line_height, slot_name(i)) #写slot名称
  106.       draw_item_name(@actor.equips[i], rect.x + 48, rect.y) #画装备的item
  107.     }
  108.   end
  109. end
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
117
在线时间
35 小时
注册时间
2014-4-21
帖子
6
2
发表于 2015-3-20 23:12:47 | 显示全部楼层
VIPArcher 发表于 2015-3-20 09:38
这个问题还是很好解决的,在生成已装备列表窗口时重新生成一下窗口内容contents就好了,比如具体可以参考 ...


可能我前面对问题的描述不太清楚,实际上我是这样解决这个问题的:
改掉这一段:
RUBY 代码复制
  1. class Window_Selectable < Window_Base
  2.   def refresh
  3.     create_contents     #这里本来是contents.dispose。但dispose并不改变contents的位图大小。所以需要create_contents,重新定义位图大小。改好了以后所有可能出现的类似问题全部解决了。
  4.     draw_all_items
  5.   end
  6. end

评分

参与人数 1星屑 +100 收起 理由
VIPArcher + 100 我很赞同

查看全部评分

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-6-14 21:43

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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