Project1

标题: 怎样绘制如下图的选单? [打印本页]

作者: cskm2005    时间: 2013-10-6 16:53
标题: 怎样绘制如下图的选单?
本帖最后由 cskm2005 于 2013-10-7 10:45 编辑

怎样绘制如下图的选单?


就是想改成像它一样的头像高度,半透明.
HP显示,或者可以加MP显示...
或者原本高度的一半,将称号显示,职业就隐藏....

是Window_Base那一行吗?
那一个?要怎改?

已经一直在找教学,可是又找不到....

作者: 喵呜喵5    时间: 2013-10-6 17:38
改起来感觉好烦所以只说思路……
要改的是Window_MenuStatus,其中有一个def draw_item(index),这个方法用来绘制窗口中的角色,所以从它入手,接下来对它一句一句分析
  1.     actor = $game_party.members[index]
  2. #这句的意思是获取对应角色的信息
  3.     enabled = $game_party.battle_members.include?(actor)
  4. #这句的意思是获取这个角色是否参战,没参战的角色在菜单中显示为半透明就是这句的功劳
  5. #因此,希望所有角色都半透明的话直接把这句改成enabled = false即可
  6.     rect = item_rect(index)
  7. #获取需要绘制的位置
  8.     draw_item_background(index)
  9. #绘制背景
  10.     draw_actor_face(actor, rect.x + 1, rect.y + 1, enabled)
  11. #绘制脸图
  12.     draw_actor_simple_status(actor, rect.x + 108, rect.y + line_height / 2)
  13. #绘制角色的简单状态(HP、MP等)
复制代码
既然要改脸图,接着就从draw_actor_face(actor, rect.x + 1, rect.y + 1, enabled)这句入手,这个draw_actor_face是父类Window_Base中的方法
  1.   def draw_actor_face(actor, x, y, enabled = true)
  2.     draw_face(actor.face_name, actor.face_index, x, y, enabled)
  3.   end
复制代码
这个draw_face方法的内容又是什么呢?
  1.   def draw_face(face_name, face_index, x, y, enabled = true)
  2.     bitmap = Cache.face(face_name)
  3. #获取角色脸图
  4.     rect = Rect.new(face_index % 4 * 96, face_index / 4 * 96, 96, 96)
  5. #通过脸图的id计算脸图要显示的范围
  6.     contents.blt(x, y, bitmap, rect, enabled ? 255 : translucent_alpha)
  7.     bitmap.dispose
  8. #绘制
  9.   end
复制代码
现在整个思路就明确了,要修改脸图的大小和位置,只需要从这一句入手即可
  1. rect = Rect.new(face_index % 4 * 96, face_index / 4 * 96, 96, 96)
复制代码
同理,修改角色的HP、MP同样可以通过这种追溯的过程找到脚本中对应的代码


最后说一句,虽然你找到了这些代码在Window_Base中的位置,但是不要在Window_Base中改啊……
请把对应的方法复制一份到Window_MenuStatus里去再做修改……
作者: cskm2005    时间: 2013-10-6 23:36
本帖最后由 cskm2005 于 2013-10-7 00:12 编辑

经大大提示后...
不停尝试....得出:
  1. rect = Rect.new(face_index % 4 * 96, face_index / 4 * 116, 96, 46)
复制代码
比较接近上图摆位...
当然HP,MP,名字...要怎去除,移位还是不太懂...
只能移到贴近边线...

然后,我发现对话的时候,角色图也跟着被斩了....
另外,有部份角色的图....斩得很奇怪..
如图:



想说是不是因为在Window_Base中改,令整局都变成这样...
于是复制一份到Window_MenuStatus里去修改……
结果出错了..
搬来搬去都一样...
==============================
集合网络的类似作法...
终于都暂了一大块...
解决了想要和不想要的...
HP也不小心斩了...
不知何故队伍不能加人了?!

作者: cskm2005    时间: 2013-10-7 01:19
本帖最后由 cskm2005 于 2013-10-7 01:32 编辑

总算做好了...
但有些角色图怪怪的....
是不是我在头像上拿握得不好?
有些是只有头顶的...



这边贴脚本,给各位大大校证看看...
有需要的人也可以随便拿去...
再次感谢各位...

代码复制
  1. #encoding:utf-8
  2. #==============================================================================
  3. # ■ Window_MenuStatus
  4. #------------------------------------------------------------------------------
  5. #  菜单画面中,显示队伍成员状态的窗口
  6. #==============================================================================
  7.  
  8. class Window_MenuStatus < Window_Selectable
  9.   #--------------------------------------------------------------------------
  10.   # ● 初始化对象
  11.   #--------------------------------------------------------------------------
  12.   def initialize(x, y)
  13.     super(x, y, window_width, window_height)
  14.     self.y = Graphics.height - self.height
  15.     @pending_index = -1
  16.     refresh
  17.   end
  18.   #--------------------------------------------------------------------------
  19.   # ● 取得視窗的寬度
  20.   #--------------------------------------------------------------------------
  21.   def window_width
  22.     Graphics.width - 160
  23.   end
  24.   #--------------------------------------------------------------------------
  25.   # ● 取得視窗的高度
  26.   #--------------------------------------------------------------------------
  27.   def window_height
  28.     Graphics.height
  29.   end
  30.   #--------------------------------------------------------------------------
  31.   # ● 获取项目数
  32.   #--------------------------------------------------------------------------
  33.   def item_max
  34.     return 1 #$game_party.members.size
  35.   end
  36.   #--------------------------------------------------------------------------
  37.   # ● 绘制简单的状态
  38.   #--------------------------------------------------------------------------
  39.   def draw_actor_simple_status(actor, x, y)
  40.     draw_actor_name(actor, x -102 , y +12)
  41.     draw_actor_nickname(actor, x + 142, y-8)
  42.     draw_actor_hp(actor, x -5, y-10)
  43.     draw_actor_mp(actor, x +20, y+10)
  44.     draw_actor_icons(actor, x, y + line_height * 2)
  45.   end
  46.   #--------------------------------------------------------------------------
  47.   # ● 繪制角色肖像圖
  48.   #     enabled : 有效的標志。false 的時候使用半透明效果繪制
  49.   #--------------------------------------------------------------------------
  50.   def draw_face(face_name, face_index, x, y, enabled = true)
  51.     bitmap = Cache.face(face_name)
  52.     rect = Rect.new(face_index % 4 * 96, face_index / 4 * 116, 96, 46)
  53.     contents.blt(x, y, bitmap, rect, enabled ? 255 : translucent_alpha)
  54.     bitmap.dispose
  55.   end
  56.   #--------------------------------------------------------------------------
  57.   # ● 取得專案數
  58.   #--------------------------------------------------------------------------
  59.   def item_max
  60.     $game_party.members.size
  61.   end
  62.   #--------------------------------------------------------------------------
  63.   # ● 取得專案的高度
  64.   #--------------------------------------------------------------------------
  65.   def item_height
  66.     (height - standard_padding * 2) / 8
  67.   end
  68. end

作者: Algalon    时间: 2013-10-7 04:30
52 行改成 rect = Rect.new(face_index % 4 * 96, face_index / 4 * 96 + 40, 96, 46), 再把文字位置改一下
作者: cskm2005    时间: 2013-10-7 10:43
本帖最后由 cskm2005 于 2013-10-7 10:44 编辑
Algalon 发表于 2013-10-7 04:30
52 行改成 rect = Rect.new(face_index % 4 * 96, face_index / 4 * 96 + 40, 96, 46), 再把文字位置改一 ...


改成+20就完美了,终于成功了,谢谢{:2_275:}
当然,最好说明一下为何 +比没+的来的贴切啦
明明都116..




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