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

Project1

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

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

[复制链接]

Lv3.寻梦者

梦石
0
星屑
1012
在线时间
145 小时
注册时间
2013-10-16
帖子
271
跳转到指定楼层
1
发表于 2015-2-23 10:31:11 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
本帖最后由 rpg-sheep 于 2015-2-24 07:51 编辑

由于word版式问题,目前正在更新......


效果预览:



看到这么炫的界面,你是不是也心动了呢?别急,小优来教你如何制作红色框框里的界面~
【某小白】我没有脚本基础怎么办呢?(⊙o⊙)?
【小优】你有小学六年级的语数英还有电脑基础就行~还需要一定PS基础。↖(^ω^)↗
【某伸手党】哎呀,我要做红框框以外的部分!!o(>﹏<)o
【小优】不教~保密(我会告诉你原理差不多么)O(∩_∩)O
【某大神】你太弱了。╭∩╮(︶︿︶)╭∩╮
【小优】……(#‵′)凸
那么小优将会如何写这篇教程呢?
*代码少,思路多
*教你如何偷懒(不会偷懒的程序员不是好程序员=w=)

Step1:“抄袭”(已完成)

Step2:脱离RM原脚本并加入菜单(已完成)

Step3:修改窗口(已完成)

Tip1:实现各种操作方式的方法(等待编辑)

Tip2:友好的操作界面(已完成)

Step4:扩充装备栏(编辑中)

Step5:加入换装系统(等待更新)

Tip3:有没有想过这个问题?(等待更新)
开心咸鱼每一天~

Lv4.逐梦者

梦石
10
星屑
5103
在线时间
1836 小时
注册时间
2013-2-14
帖子
395

开拓者

2
发表于 2015-2-23 19:44:10 | 只看该作者
学习中。。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
37 小时
注册时间
2013-7-27
帖子
5
3
发表于 2015-2-28 21:32:52 | 只看该作者
VA的立绘换装帖子基本找不到呀。。。楼主救星~ 赞一个……(当惯了伸手党之后的痛……)
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
9280
在线时间
2504 小时
注册时间
2011-5-20
帖子
15389

开拓者

4
发表于 2015-3-6 22:07:36 | 只看该作者
Step4:扩充装备栏
大家都知道,RM默认仅有5个装备栏。可是有些游戏需要6个甚至更多,怎么办?
方法一:
偷懒儿~~
看红色部分,这个决定了只有5个装备栏。
果断废掉!!!!!为了偷懒我不要了。

编辑中里面是一段说明···
[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
117
在线时间
35 小时
注册时间
2014-4-21
帖子
6
5
发表于 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
回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

无限の剣制

梦石
0
星屑
9971
在线时间
5019 小时
注册时间
2013-2-28
帖子
5030

开拓者贵宾

6
发表于 2015-3-20 09:38:48 | 只看该作者
nevets 发表于 2015-3-19 23:34
关于扩展装备slot,这里是我的一个解决方案,理论上可以插入任意数量的slot,只要在一开始slot名称定义数组 ...

这个问题还是很好解决的,在生成已装备列表窗口时重新生成一下窗口内容contents就好了,比如
  1. class Scene_Equip < Scene_MenuBase
  2.   #--------------------------------------------------------------------------
  3.   # ● 生成装备栏窗口
  4.   #--------------------------------------------------------------------------
  5.   alias slot_vip_create_slot_window create_slot_window
  6.   def create_slot_window
  7.     slot_vip_create_slot_window
  8.     @slot_window.create_contents
  9.     @slot_window.refresh
  10.   end
  11. end
复制代码
具体可以参考这个脚本里面的处理
https://rpg.blue/thread-371391-1-1.html
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
117
在线时间
35 小时
注册时间
2014-4-21
帖子
6
7
发表于 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 我很赞同

查看全部评分

回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
3
星屑
65
在线时间
200 小时
注册时间
2008-7-8
帖子
180
8
发表于 2015-8-8 12:22:32 | 只看该作者
马克!虽然看来看去还是略难懂
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
3
星屑
65
在线时间
200 小时
注册时间
2008-7-8
帖子
180
9
发表于 2015-8-8 17:58:07 | 只看该作者
经过测试发现了一个小问题
按理来说这种换装选项应该是与装备选项平行的一个概念,因而在handler关联的方法上应该跟equip一样是:command_personal
并且把对Scene_Cloth的调用放到on_personal_ok这个方法内部的判断中

这样才能让按完菜单按钮后先选择人物再进入界面
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-5-21 10:13

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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