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

Project1

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

[原创发布] 地图显示HP条,SP条,金钱等

[复制链接]

Lv3.寻梦者

梦石
0
星屑
1090
在线时间
324 小时
注册时间
2017-1-24
帖子
122

开拓者

跳转到指定楼层
1
发表于 2017-6-17 15:57:32 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式

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

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

x
本帖最后由 戴迪 于 2017-8-5 03:18 编辑

不会的直接下载范例
RUBY 代码复制
  1. #==============================================================================
  2. # ■地图显示HP/SP槽 + 金钱数量
  3. # -by:戴迪
  4. # -2017.6.17
  5. # -本人首个脚本......大触轻喷
  6. #------------------------------------------------------------------------------
  7. #此脚本结构简单,可供比我还新的人学习- -
  8. #此脚本可自行更改HP/SP槽的大小,颜色,显示的坐标,
  9. #有能力的还可自行添加EXP,等级显示等
  10. #HP/SP槽比较简易,本人在思考如何美化
  11. #------------------------------------------------------------------------------
  12. #使用方法:
  13. #1.在Main之前插入此脚本,
  14. #
  15. #2.在Scene_Map里,找到"●主处理下"的       # 生成信息窗口,添加
  16. #     @mapshow = Window_Mapshow.new
  17. #     @mapshow.opacity = 60   #-------------------------------更改窗口透明度
  18. #
  19. #   再往下滑,找到                         # 释放信息窗口,添加
  20. #          @mapshow.dispose
  21. #
  22. #   再往下滑.....找到"●刷新画面"下的      #刷新信息窗口,添加
  23. #     @mapshow.update
  24. #
  25. #   完毕.
  26. #   
  27. #==============================================================================
  28. # ■ Window_Mapshow
  29. #------------------------------------------------------------------------------
  30. #  显示血条的窗口。
  31. #==============================================================================
  32. class Window_Mapshow < Window_Base
  33.   Hide_Window_Mapshow = 33                    #-----控制窗口的开关为33号开关
  34.   #--------------------------------------------------------------------------
  35.   # ● 初始化窗口
  36.   #--------------------------------------------------------------------------
  37.   def initialize
  38.     super(0, 0, 640, 40 + 32)
  39.     self.contents = Bitmap.new(width - 32, height - 32)
  40.     refresh
  41.   end
  42.   #--------------------------------------------------------------------------
  43.   # ● 描绘HP槽
  44.   #--------------------------------------------------------------------------
  45.   def draw_actor_hp_bar(actor, x, y,width = 200)
  46.     self.contents.fill_rect(36,4,width + 4,24,Color.new(255,255,255,255))
  47.     self.contents.fill_rect(36 + 2,4 + 2,width ,20,Color.new(0,0,0,255))
  48.     w1 = (1.0 * $game_party.actors[0].hp  / $game_party.actors[0].maxhp) * width
  49.     self.contents.fill_rect(36 + 2,4 + 2,w1 ,20,Color.new(200,0,0,255))
  50.   end
  51.   #--------------------------------------------------------------------------
  52.   # ● 描绘SP槽
  53.   #--------------------------------------------------------------------------
  54.   def draw_actor_sp_bar(actor, x, y,width = 200)
  55.     self.contents.fill_rect(36 + 240 ,4,width + 4,24,Color.new(255,255,255,255))
  56.     self.contents.fill_rect(36 + 2 + 240 ,4 + 2,width ,20,Color.new(0,0,0,255))
  57.     w2 = (1.0 * $game_party.actors[0].sp / $game_party.actors[0].maxsp) * width
  58.     self.contents.fill_rect(36 + 2 + 240,4 + 2,w2 ,20,Color.new(248,112,0,255))
  59.   end
  60.   #--------------------------------------------------------------------------
  61.   # ● 描绘金钱数目
  62.   #--------------------------------------------------------------------------
  63.   def draw_actor_gold(actor, x, y,width = 200)
  64.     cx = contents.text_size($data_system.words.gold).width  #cx = 11
  65.     self.contents.font.color = normal_color
  66.     self.contents.draw_text(538, 0, 64-cx-2 ,32, $game_party.gold.to_s, 2)
  67.     self.contents.font.color = system_color
  68.     self.contents.draw_text(600-cx, 0, cx, 32, $data_system.words.gold, 2)
  69.   end
  70.   #--------------------------------------------------------------------------
  71.   # ● 刷新--通常在这绘制位图
  72.   #--------------------------------------------------------------------------
  73.   def refresh
  74.     self.contents.clear
  75.     draw_actor_hp_bar($game_party.actors[0], 0, 20)
  76.     draw_actor_sp_bar($game_party.actors[0], 0, 20)
  77.     draw_actor_gold($game_party.gold.to_s, 0, 20)
  78.     self.contents.font.color = Color.new(255,255,255,255)
  79.     self.contents.draw_text(0,0 , 36, 32, "HP:")
  80.     self.contents.draw_text(70,0 , 36, 32,$game_party.actors[0].hp.to_s)
  81.     self.contents.draw_text(70 + 63,0 + 1, 36, 32, "/")
  82.     self.contents.draw_text(70 + 63 + 42,0 + 1, 36, 32,$game_party.actors[0].maxhp.to_s)
  83.     self.contents.draw_text(0 + 240,0 , 36, 32, "SP:")
  84.     self.contents.draw_text(70 + 240,0 , 36, 32,$game_party.actors[0].sp.to_s)
  85.     self.contents.draw_text(70 + 63 + 240,0 + 1, 36, 32, "/")
  86.     self.contents.draw_text(70 + 105 + 240,0 + 1, 36, 32,$game_party.actors[0].maxsp.to_s)
  87.   end
  88.   def update
  89.     super
  90.     self.visible = !$game_switches[Hide_Window_Mapshow]
  91.     return unless self.visible                 #-----unless相当于if not
  92.     rest_hp = $game_party.actors[0].hp
  93.     max_hp = $game_party.actors[0].maxhp
  94.     rest_sp = $game_party.actors[0].sp
  95.     max_sp = $game_party.actors[0].maxsp
  96.     gold = $game_party.gold
  97.     if $l7_old_hp != rest_hp || ($l7_old_maxhp != max_hp) || $l7_old_sp != rest_sp || ($l7_old_maxsp != max_sp) || $l7_old_gold != gold
  98.        $l7_old_hp = rest_hp
  99.        $l7_old_maxhp = max_hp
  100.        $l7_old_sp = rest_sp
  101.        $l7_old_maxsp = max_sp
  102.        refresh
  103.     end
  104.   end
  105. end

RUBY 代码复制
  1. # 生成信息窗口----------------------------------在此处添加窗口
  2.     @message_window = Window_Message.new
  3.     @mapshow = Window_Mapshow.new
  4.     @mapshow.opacity = 20   #------------------------更改窗口透明度

RUBY 代码复制
  1. # 释放信息窗口--------------------------------记得在此处释放窗口
  2.     @message_window.dispose
  3.     @mapshow.dispose

RUBY 代码复制
  1. # 刷新信息窗口----------------------------记得在此处刷新窗口
  2.     @message_window.update
  3.     @mapshow.update

截图

地图显示HP SP 条.rar (192.2 KB, 下载次数: 277)

评分

参与人数 2星屑 +70 收起 理由
铅笔描绘的思念 + 40 塞糖
钓鱼的岛 + 30 精品文章

查看全部评分

Lv1.梦旅人

梦石
0
星屑
141
在线时间
77 小时
注册时间
2012-4-5
帖子
33
12
发表于 前天 23:34 | 只看该作者

  1. class Window_MapStatus < Window_Base
  2.   # 假设 Hide_Window_Mapshow 是一个开关 ID,这里定义为常量以便管理
  3.   HIDE_SWITCH_ID = 1 # 请根据实际项目修改此 ID

  4.   def initialize
  5.     # 假设窗口大小为 640x48 或类似,需根据实际布局调整
  6.     super(0, 0, 640, 48)
  7.     self.opacity = 0 # 如果需要透明背景
  8.     @old_hp = nil
  9.     @old_maxhp = nil
  10.     @old_sp = nil
  11.     @old_maxsp = nil
  12.     @old_gold = nil
  13.     refresh
  14.   end

  15.   def actor
  16.     # 安全获取第一个演员,避免空数组错误
  17.     return $game_party.actors if $game_party.actors.size > 0
  18.     return nil
  19.   end

  20.   #--------------------------------------------------------------------------
  21.   # ● 描绘HP槽
  22.   #--------------------------------------------------------------------------
  23.   def draw_actor_hp_bar(actor, x, y, width = 200)
  24.     return unless actor
  25.    
  26.     # 背景框 (白色边框)
  27.     self.contents.fill_rect(x, y, width + 4, 24, Color.new(255, 255, 255, 255))
  28.     # 内部黑底
  29.     self.contents.fill_rect(x + 2, y + 2, width, 20, Color.new(0, 0, 0, 255))
  30.    
  31.     # 计算 HP 比例,防止除以零
  32.     rate = actor.maxhp == 0 ? 0 : 1.0 * actor.hp / actor.maxhp
  33.     w1 = (rate * width).to_i
  34.    
  35.     # 红色血条
  36.     self.contents.fill_rect(x + 2, y + 2, w1, 20, Color.new(200, 0, 0, 255))
  37.   end

  38.   #--------------------------------------------------------------------------
  39.   # ● 描绘SP槽
  40.   #--------------------------------------------------------------------------
  41.   def draw_actor_sp_bar(actor, x, y, width = 200)
  42.     return unless actor

  43.     # 背景框 (白色边框) - 注意:这里假设 x 是起始位置,不再硬编码 +240
  44.     self.contents.fill_rect(x, y, width + 4, 24, Color.new(255, 255, 255, 255))
  45.     # 内部黑底
  46.     self.contents.fill_rect(x + 2, y + 2, width, 20, Color.new(0, 0, 0, 255))
  47.    
  48.     # 计算 SP 比例
  49.     rate = actor.maxsp == 0 ? 0 : 1.0 * actor.sp / actor.maxsp
  50.     w2 = (rate * width).to_i
  51.    
  52.     # 橙色魔条
  53.     self.contents.fill_rect(x + 2, y + 2, w2, 20, Color.new(248, 112, 0, 255))
  54.   end

  55.   #--------------------------------------------------------------------------
  56.   # ● 描绘金钱数目
  57.   #--------------------------------------------------------------------------
  58.   def draw_actor_gold(x, y)
  59.     gold_text = $game_party.gold.to_s
  60.     gold_unit = $data_system.words.gold
  61.    
  62.     cx = contents.text_size(gold_unit).width
  63.    
  64.     # 绘制数字 (右对齐或左对齐需根据需求调整,这里保持原意:数字在左,单位在右)
  65.     self.contents.font.color = normal_color
  66.     # 原代码逻辑:数字在 538,单位在 600-cx。这里改为相对 x,y 的布局
  67.     # 假设总宽度预留 100 像素给金钱显示
  68.     money_area_width = 100
  69.     self.contents.draw_text(x + money_area_width - cx - 64, y, 64 - cx - 2, 32, gold_text, 2)
  70.    
  71.     self.contents.font.color = system_color
  72.     self.contents.draw_text(x + money_area_width - cx, y, cx, 32, gold_unit, 2)
  73.   end

  74.   #--------------------------------------------------------------------------
  75.   # ● 刷新
  76.   #--------------------------------------------------------------------------
  77.   def refresh
  78.     self.contents.clear
  79.    
  80.     act = actor
  81.     return unless act # 如果没有演员,则不绘制

  82.     # 定义布局常量,方便调整
  83.     hp_x = 40
  84.     sp_x = 280 # 原代码是 36+240=276 左右,这里取整
  85.     text_y = 0
  86.     bar_y = 20
  87.    
  88.     # 绘制标签
  89.     self.contents.font.color = Color.new(255, 255, 255, 255)
  90.     self.contents.draw_text(hp_x - 40, text_y, 40, 32, "血量:")
  91.     self.contents.draw_text(sp_x - 40, text_y, 40, 32, "魔法:")
  92.    
  93.     # 绘制数值文本
  94.     self.contents.font.color = normal_color
  95.     hp_text = "#{act.hp}/#{act.maxhp}"
  96.     sp_text = "#{act.sp}/#{act.maxsp}"
  97.    
  98.     self.contents.draw_text(hp_x, text_y, 100, 32, hp_text, 0)
  99.     self.contents.draw_text(sp_x, text_y, 100, 32, sp_text, 0)
  100.    
  101.     # 绘制进度条
  102.     draw_actor_hp_bar(act, hp_x, bar_y, 200)
  103.     draw_actor_sp_bar(act, sp_x, bar_y, 200)
  104.    
  105.     # 绘制金钱 (放在右侧)
  106.     draw_actor_gold(self.width - 120, text_y)
  107.   end

  108.   #--------------------------------------------------------------------------
  109.   # ● 更新
  110.   #--------------------------------------------------------------------------
  111.   def update
  112.     super
  113.    
  114.     # 控制可见性
  115.     self.visible = !$game_switches[HIDE_SWITCH_ID]
  116.     return unless self.visible
  117.    
  118.     act = actor
  119.     return unless act # 如果没有演员,无需更新状态检查

  120.     rest_hp = act.hp
  121.     max_hp = act.maxhp
  122.     rest_sp = act.sp
  123.     max_sp = act.maxsp
  124.     gold = $game_party.gold
  125.    
  126.     # 检查是否有变化
  127.     if @old_hp != rest_hp || @old_maxhp != max_hp ||
  128.        @old_sp != rest_sp || @old_maxsp != max_sp ||
  129.        @old_gold != gold
  130.       
  131.       @old_hp = rest_hp
  132.       @old_maxhp = max_hp
  133.       @old_sp = rest_sp
  134.       @old_maxsp = max_sp
  135.       @old_gold = gold
  136.       
  137.       refresh
  138.     end
  139.   end
  140. end
复制代码
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
910
在线时间
94 小时
注册时间
2005-10-22
帖子
397
11
发表于 2018-4-22 12:50:56 | 只看该作者
还不错,配合我的小露比历险记的工程的纯事件地图战斗,完全就是个Arpg的完整版本了。
做脚本先从修改脚本做起,我只修改自己觉得能用到的东西。
以后的任何作品都将不会进行分享。
Bilibili:https://space.bilibili.com/288814521
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
915
在线时间
5 小时
注册时间
2016-2-21
帖子
3
10
发表于 2018-4-21 13:33:38 | 只看该作者
感谢提供~抱走
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
1 小时
注册时间
2017-5-30
帖子
1
9
发表于 2017-6-18 13:19:37 | 只看该作者
谢谢楼主~
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
314
在线时间
80 小时
注册时间
2015-9-4
帖子
43
8
发表于 2017-6-18 11:23:35 | 只看该作者
戴迪 发表于 2017-6-18 11:20
当然是自己描绘的啦,就是画几个色条上去而已

我也有很多漂亮的血蓝条,但是不知道在哪里放进去。替换原来的血槽
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1090
在线时间
324 小时
注册时间
2017-1-24
帖子
122

开拓者

7
 楼主| 发表于 2017-6-18 11:20:12 | 只看该作者
花天酒地 发表于 2017-6-18 11:18
HP和SP是系统自带的还是你弄得血槽,

当然是自己描绘的啦,就是画几个色条上去而已
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
314
在线时间
80 小时
注册时间
2015-9-4
帖子
43
6
发表于 2017-6-18 11:18:43 | 只看该作者
戴迪 发表于 2017-6-18 11:08
HP,SP条只能改颜色,大小,坐标,金钱显示的效果就跟在菜单栏里的显示效果一样。至于头像,等我有时间的 ...

HP和SP是系统自带的还是你弄得血槽,
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1090
在线时间
324 小时
注册时间
2017-1-24
帖子
122

开拓者

5
 楼主| 发表于 2017-6-18 11:08:50 | 只看该作者
本帖最后由 戴迪 于 2017-6-18 11:19 编辑
花天酒地 发表于 2017-6-18 10:57
我想更换下你画面上显示的血蓝条和金钱条。但是没找到在哪里更换图标。能否增加个头像上去 ...


HP,SP条只能改颜色,大小,坐标,金钱显示的效果就跟在菜单栏里的显示效果一样。至于头像,等我有时间的时候弄下。思路就是使用在位图里添加图片的方法。Color.new(255,255,255,255)是显示颜色,最后一个数字是透明度。想把颜色改成自己想要的就改下数字就行了,至于怎么改。至于怎么改参考RGB色彩
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
314
在线时间
80 小时
注册时间
2015-9-4
帖子
43
4
发表于 2017-6-18 10:57:04 | 只看该作者
戴迪 发表于 2017-6-18 10:54
随便拿,对你有用就行.有BUG请反馈给我,好改正.

我想更换下你画面上显示的血蓝条和金钱条。但是没找到在哪里更换图标。能否增加个头像上去
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-6-4 18:49

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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