赞 | 1 |
VIP | 0 |
好人卡 | 4 |
积分 | 12 |
经验 | 31094 |
最后登录 | 2024-10-27 |
在线时间 | 898 小时 |
Lv3.寻梦者
- 梦石
- 0
- 星屑
- 1244
- 在线时间
- 898 小时
- 注册时间
- 2014-12-4
- 帖子
- 379
|
本帖最后由 翻滚牛宝宝 于 2015-3-19 13:47 编辑
饭粒见原帖2楼 原帖地址:https://rpg.blue/forum.php?mod=v ... A%E8%A1%80%E6%9D%A1- # 我们要创建一个在地图上显示的血条
- # 我们需要图片 图片可以借助【Bitmap】引用
- # Bitmap要显示在画面上 需要借助【Sprite】
- # VA原系统就有一套显示在画面上的Sprite 比如:行走图 地图图块……
- # 它把这套Sprite放在了一起 也就是【Spriteset】
- # 用于地图的Spriteset是【Spriteset_Map】 它是游戏自己定义的 在左边的列表可以找到
-
- # 我们把我们的血条放进Spriteset_Map 这样就会和其他的东西一起被调用
- class Spriteset_Map
- # 打开这个类
-
- # create_viewports方法在initialize(初始化)里面调用 我们把我们的方法也塞在一起
- alias :create_viewports_2014_05_25_ex_mo_hp_bar :create_viewports
- # 起别名: 新的别名 原来的名字
- def create_viewports
- # 打开原来的方法
- create_viewports_2014_05_25_ex_mo_hp_bar
- # 通过别名 调用以前的方法
- # 如果不取别名 直接用原名 系统不知道你要调用的是原来的方法
- # 还是你正在改的这个方法
- create_hp_bar
- # 调用我们自己的方法 这个方法还不存在 所以我们要新建一个
- end
-
- def create_hp_bar
- # 新建方法 创建血条
- @hp_bar = Sprite_HP_BAR.new(@viewport3)
- # 左边是我们为血条实例起的名字
- # 【Sprite_HP_BAR】是我们将用来控制血条的类 目前还没有做好
- # 【类.new(参数)】的过程会将参数传递给类的initialize方法
-
- # @viewport3是原系统自动创建的显示端口
- # 这套端口有三个:@viewport1 @viewport2 @viewport3
- # 3显示在2的前面 会遮挡住2 2在1的前面 我们不能让地图挡住了血条
- # 所以用3
- end
-
- alias :update_2014_05_25_ex_mo_hp_bar :update
- # 更新 理论上 这个方法每帧调用一次
- def update
- update_hp_bar # 更新我们的血条
- update_2014_05_25_ex_mo_hp_bar
- end
-
- def update_hp_bar
- @hp_bar.update # 更新我们的血条 这里调用了update
- end
-
- alias :dispose_2014_05_25_ex_mo_hp_bar :dispose
- # 释放
- # 总有结束游戏(或退出地图)的时候
- # 释放所有的地图精灵 腾出空间给其他的界面
- def dispose
- dispose_hp_bar #
- dispose_2014_05_25_ex_mo_hp_bar
- end
-
- def dispose_hp_bar
- @hp_bar.dispose #调用了 dispose
- end
- end
-
-
- # 现在开始我们的类
- class Sprite_HP_BAR
-
- # 还记得吗? .new(@viewport3)
- def initialize(v)
- @hp_bar_back = Sprite.new(v) # Sprite 是内建的精灵类
- @hp_bar_fore = Sprite.new(v)
- @hp_bar_fore.x, @hp_bar_fore.y = 0, 0 # 调整位置 这是左上角的坐标
- @hp_bar_fore.x, @hp_bar_fore.y = 81, 34
- @hp_bar_back.bitmap = Cache.system("HP_Bar") # 获取图片 并设置为精灵的bitmap
- @hp_bar_fore.bitmap = Cache.system("HP_Green") # 用于显示
- # Cache是原生的模块 用于读取并缓存图片 它的内部会调用Bitmap.new来建立图片
- @hp_bar_fore.opacity = 200
- # 调整前景(血条)的不透明度
- @status = :healthy # :dying :injured :healthy
- # 用一个变量标记当前的状态 以便切换血条颜色
-
- # 以下是在背景上描绘文字
- # draw_text是Bitmap类里面的方法
- # draw_text(横坐标, 纵坐标, 宽度, 高度, 要描绘的文字, 对齐方式)
- # 对齐方式默认为0 代表左对齐 1居中 2右对齐
- @hp_bar_back.bitmap.draw_text(50, 30, 60, 30, "HP")
- @hp_bar_back.bitmap.font.size = 20 # 调整字号
- @hp_bar_back.bitmap.draw_text(222, 53, 84, 30, $game_party.leader.name, 1)
- # $game_party.leader可以获取领队 .name获取名字
- @hp_bar_back.bitmap.font.size = 16
- @hp_bar_back.bitmap.draw_text(312, 53, 36, 30,
- "Lv.#{$game_party.leader.level}", 1)
- # 获取等级
- end
-
- # 还记得吗?@hp_bar.update
- def update
- actor = $game_party.leader # 获取领队 保存在临时变量actor中
- if actor.hp * 100 / actor.mhp >= 60 # 如果生命率大于60% 健康
- # :healthy
- if @status != :healthy # 如果先前不是健康
- @status = :healthy # 切换到健康
- @hp_bar_fore.bitmap = Cache.system("HP_Green") # 并使用绿色血条
- end
- elsif actor.hp * 100 / actor.mhp <= 20 # 如果生命率小于20% 濒死
- # :dying
- if @status != :dying
- @status = :dying
- @hp_bar_fore.bitmap = Cache.system("HP_Red")
- end
- else # 否则 受伤
- # injured
- if @status != :injured
- @status = :injured
- @hp_bar_fore.bitmap = Cache.system("HP_Yellow")
- end
- end
- @hp_bar_fore.zoom_x = actor.hp / actor.mhp.to_f
- # 右边计算比率
- # 左边是Sprite的属性 zoom_x 代表横向缩放率 1代表100%
- end
-
- # 还记得吗?@hp_bar.dispose
- def dispose
- @hp_bar_fore.bitmap.dispose if @hp_bar_fore.bitmap
- # 先释放位图(如果有的话)
- @hp_bar_fore.dispose
- # 再释放精灵
- @hp_bar_back.bitmap.dispose if @hp_bar_back.bitmap
- @hp_bar_back.dispose
- end
- end
复制代码 |
|