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

Project1

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

[已经过期] 如何用图片做血条?

[复制链接]

Lv6.析梦学徒

梦石
0
星屑
55956
在线时间
269 小时
注册时间
2010-6-16
帖子
982
跳转到指定楼层
1
发表于 2015-3-19 13:42:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
似乎找不到范例和脚本,来求教一下…

def draw_actor_hp(actor, x, y, width = 124)
   hp_percent = 1.0 * actor.hp / actor.mhp
    @hpp_1 = Sprite.new
    @hpp_1.bitmap = Bitmap.new("Graphics/draw/hp_1.png")
    @hpp_1.x = x
    @hpp_1.y = y
    @hpp_2 = Sprite.new
    @hpp_2.bitmap = Bitmap.new("Graphics/draw/hp_2.png")
    @hpp_2.src_rect.set(x , y, hp_percent * @hpp_2.bitmap.width, @hpp_2.bitmap.height)
    @hpp_2.x = x
    @hpp_2.y= y
        draw_text(x, y, 30, line_height, Vocab::hp_a)
        draw_current_and_max_values(x, y, width, actor.hp, actor.mhp,
     hp_color(actor), normal_color)
end

这样似乎是不对的,需要刷新还是?调用后发现坐标不对,也没法实时刷新
◇◆舒克君赛高◆◇

Lv3.寻梦者

梦石
0
星屑
1244
在线时间
898 小时
注册时间
2014-12-4
帖子
379
2
发表于 2015-3-19 13:45:28 | 只看该作者
本帖最后由 翻滚牛宝宝 于 2015-3-19 13:47 编辑

饭粒见原帖2楼 原帖地址:https://rpg.blue/forum.php?mod=v ... A%E8%A1%80%E6%9D%A1
  1. # 我们要创建一个在地图上显示的血条

  2. # 我们需要图片 图片可以借助【Bitmap】引用

  3. # Bitmap要显示在画面上 需要借助【Sprite】

  4. # VA原系统就有一套显示在画面上的Sprite 比如:行走图 地图图块……

  5. # 它把这套Sprite放在了一起 也就是【Spriteset】

  6. # 用于地图的Spriteset是【Spriteset_Map】 它是游戏自己定义的 在左边的列表可以找到



  7. # 我们把我们的血条放进Spriteset_Map 这样就会和其他的东西一起被调用

  8. class Spriteset_Map

  9.   # 打开这个类



  10.   # create_viewports方法在initialize(初始化)里面调用 我们把我们的方法也塞在一起

  11.   alias :create_viewports_2014_05_25_ex_mo_hp_bar :create_viewports

  12.   # 起别名: 新的别名 原来的名字

  13.   def create_viewports

  14.     # 打开原来的方法

  15.     create_viewports_2014_05_25_ex_mo_hp_bar

  16.     # 通过别名 调用以前的方法

  17.     # 如果不取别名 直接用原名 系统不知道你要调用的是原来的方法

  18.     #  还是你正在改的这个方法

  19.     create_hp_bar

  20.     # 调用我们自己的方法 这个方法还不存在 所以我们要新建一个

  21.   end



  22.   def create_hp_bar

  23.     # 新建方法 创建血条

  24.     @hp_bar = Sprite_HP_BAR.new(@viewport3)

  25.     # 左边是我们为血条实例起的名字

  26.     # 【Sprite_HP_BAR】是我们将用来控制血条的类 目前还没有做好

  27.     # 【类.new(参数)】的过程会将参数传递给类的initialize方法



  28.     # @viewport3是原系统自动创建的显示端口

  29.     # 这套端口有三个:@viewport1 @viewport2 @viewport3

  30.     # 3显示在2的前面 会遮挡住2 2在1的前面 我们不能让地图挡住了血条

  31.     # 所以用3

  32.   end



  33.   alias :update_2014_05_25_ex_mo_hp_bar :update

  34.   # 更新 理论上 这个方法每帧调用一次

  35.   def update

  36.     update_hp_bar # 更新我们的血条

  37.     update_2014_05_25_ex_mo_hp_bar

  38.   end



  39.   def update_hp_bar

  40.     @hp_bar.update # 更新我们的血条 这里调用了update

  41.   end



  42.   alias :dispose_2014_05_25_ex_mo_hp_bar :dispose

  43.   # 释放

  44.   # 总有结束游戏(或退出地图)的时候

  45.   # 释放所有的地图精灵 腾出空间给其他的界面

  46.   def dispose

  47.     dispose_hp_bar #

  48.     dispose_2014_05_25_ex_mo_hp_bar

  49.   end



  50.   def dispose_hp_bar

  51.     @hp_bar.dispose #调用了 dispose

  52.   end

  53. end





  54. # 现在开始我们的类

  55. class Sprite_HP_BAR



  56.   # 还记得吗? .new(@viewport3)

  57.   def initialize(v)

  58.     @hp_bar_back = Sprite.new(v) # Sprite 是内建的精灵类

  59.     @hp_bar_fore = Sprite.new(v)

  60.     @hp_bar_fore.x, @hp_bar_fore.y  = 0, 0 # 调整位置 这是左上角的坐标

  61.     @hp_bar_fore.x, @hp_bar_fore.y  = 81, 34

  62.     @hp_bar_back.bitmap = Cache.system("HP_Bar") # 获取图片 并设置为精灵的bitmap

  63.     @hp_bar_fore.bitmap = Cache.system("HP_Green") # 用于显示

  64.     # Cache是原生的模块 用于读取并缓存图片 它的内部会调用Bitmap.new来建立图片

  65.     @hp_bar_fore.opacity = 200

  66.     # 调整前景(血条)的不透明度

  67.     @status = :healthy # :dying :injured :healthy

  68.     # 用一个变量标记当前的状态 以便切换血条颜色



  69.     # 以下是在背景上描绘文字

  70.     # draw_text是Bitmap类里面的方法

  71.     # draw_text(横坐标, 纵坐标, 宽度, 高度, 要描绘的文字, 对齐方式)

  72.     # 对齐方式默认为0 代表左对齐 1居中 2右对齐

  73.     @hp_bar_back.bitmap.draw_text(50, 30, 60, 30, "HP")

  74.     @hp_bar_back.bitmap.font.size = 20 # 调整字号

  75.     @hp_bar_back.bitmap.draw_text(222, 53, 84, 30, $game_party.leader.name, 1)

  76.     # $game_party.leader可以获取领队 .name获取名字

  77.     @hp_bar_back.bitmap.font.size = 16

  78.     @hp_bar_back.bitmap.draw_text(312, 53, 36, 30,

  79.     "Lv.#{$game_party.leader.level}", 1)

  80.     # 获取等级

  81.   end



  82.   # 还记得吗?@hp_bar.update

  83.   def update

  84.     actor = $game_party.leader # 获取领队 保存在临时变量actor中

  85.     if actor.hp * 100 / actor.mhp >= 60 # 如果生命率大于60% 健康

  86.       # :healthy

  87.       if @status != :healthy  # 如果先前不是健康

  88.         @status = :healthy # 切换到健康

  89.         @hp_bar_fore.bitmap = Cache.system("HP_Green") # 并使用绿色血条

  90.       end

  91.     elsif actor.hp * 100 / actor.mhp <= 20 # 如果生命率小于20% 濒死

  92.       # :dying

  93.       if @status != :dying

  94.         @status = :dying

  95.         @hp_bar_fore.bitmap = Cache.system("HP_Red")

  96.       end

  97.     else # 否则 受伤

  98.       # injured

  99.       if @status != :injured

  100.         @status = :injured

  101.         @hp_bar_fore.bitmap = Cache.system("HP_Yellow")

  102.       end

  103.     end

  104.     @hp_bar_fore.zoom_x = actor.hp / actor.mhp.to_f

  105.     # 右边计算比率

  106.     # 左边是Sprite的属性 zoom_x 代表横向缩放率 1代表100%

  107.   end



  108.   # 还记得吗?@hp_bar.dispose

  109.   def dispose

  110.     @hp_bar_fore.bitmap.dispose if @hp_bar_fore.bitmap

  111.     # 先释放位图(如果有的话)

  112.     @hp_bar_fore.dispose

  113.     # 再释放精灵

  114.     @hp_bar_back.bitmap.dispose if @hp_bar_back.bitmap

  115.     @hp_bar_back.dispose

  116.   end

  117. end
复制代码

点评

参考了一下还是不大懂,有战斗中的情况吗?  发表于 2015-3-19 14:06
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-15 23:47

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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