查看: 3569|回复: 3

[已经解决] 显示血条的脚本 怎么让在指定地图显示 或者开关显示

[复制链接]
梦石
0
星屑
1309
在线时间
904 小时
注册时间
2014-12-4
回帖
349
发表于 2015-1-22 20:35:03 | 显示全部楼层 |阅读模式

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

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

×
我想让这个脚本在指定的地图 或者开关显示,请问大触应该在哪里插入代码…… 怎么写?
原帖地址:https://rpg.blue/forum.php?mod=v ... A%E8%A1%80%E6%9D%A1
[pre lang="ruby" line="1"]# 我们要创建一个在地图上显示的血条
# 我们需要图片 图片可以借助【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[/pre]

点评

@hp_bar_fore.x, @hp_bar_fore.y = 0, 0 # 调整位置 这是左上角的坐标  发表于 2015-1-22 20:40
梦石
0
星屑
22879
在线时间
8598 小时
注册时间
2011-12-31
回帖
3270
发表于 2015-1-22 21:04:32 | 显示全部楼层
   応該在這幾行巴
貎似没有一個基準点要逐個改
@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)

点评

我不是要改位置,是要开关调用脚本  发表于 2015-1-22 22:07

评分

参与人数 1星屑 +66 收起 理由
熊喵酱 + 66 感謝幫忙

查看全部评分

回复

使用道具 举报

…あたしは天

梦石
0
星屑
2308
在线时间
4033 小时
注册时间
2010-10-4
回帖
10548

开拓者贵宾

发表于 2015-2-5 07:53:31 | 显示全部楼层
本帖最后由 taroxd 于 2017-12-8 18:14 编辑

96行下面加几句试试:
  1. if $game_switches[开关ID]
  2.   @hp_bar_back.visible = true
  3.   @hp_bar_fore.visible = true
  4. else
  5.   @hp_bar_back.visible = false
  6.   @hp_bar_fore.visible = false
  7.   return
  8. end
  9.   
复制代码

评分

参与人数 1星屑 +132 收起 理由
熊喵酱 + 132 认可答案

查看全部评分

回复

使用道具 举报

梦石
3
星屑
3410
在线时间
451 小时
注册时间
2015-9-20
回帖
168
发表于 2017-12-2 22:52:17 | 显示全部楼层
taroxd 主为什么 我在96行下加如您写的代码出错呢

856.PNG


6.PNG




回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部