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

Project1

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

[已经过期] 新手问题:怎么让战斗中的敌人也有血条

 关闭 [复制链接]

Lv2.观梦者

花开堪折直须折

梦石
0
星屑
686
在线时间
943 小时
注册时间
2010-7-17
帖子
4963

贵宾

跳转到指定楼层
1
发表于 2011-5-19 19:29:48 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
直接用$data_enemies貌似不行,因为数据库里只有maxhp。。
可是在战斗中敌人是会损伤生命的啊!怎么让敌人也能参与draw_acotr_hp的描绘呢?
大家好,我叫节操,有一天,我被吃了。
http://forever-dream.5d6d.com
永恒の梦制作组论坛

129993099
永恒の梦制作组QQ群

Lv1.梦旅人

梦石
0
星屑
50
在线时间
36 小时
注册时间
2008-2-22
帖子
35
2
发表于 2011-5-19 21:48:14 | 只看该作者
敌人数据是 Game_Enemy 不是 $data_enemies .

敌人队伍是 Game_Troop . 可以从 Game_Troop 里面开始修改. 配合 Scene_Battle .
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
466 小时
注册时间
2006-2-25
帖子
1863
3
发表于 2011-5-19 22:58:51 | 只看该作者
本帖最后由 诡异の猫 于 2011-5-19 23:02 编辑

回复 冰舞蝶恋 的帖子

参照Window_Base里面的draw_actor_hp方法
  1. def draw_actor_hp(actor, x, y, width = 120)
  2.     draw_actor_hp_gauge(actor, x, y, width)
  3.     self.contents.font.color = system_color
  4.     self.contents.draw_text(x, y, 30, WLH, Vocab::hp_a)
  5.     self.contents.font.color = hp_color(actor)
  6.     last_font_size = self.contents.font.size
  7.     xr = x + width
  8.     if width < 120
  9.       self.contents.draw_text(xr - 44, y, 44, WLH, actor.hp, 2)
  10.     else
  11.       self.contents.draw_text(xr - 99, y, 44, WLH, actor.hp, 2)
  12.       self.contents.font.color = normal_color
  13.       self.contents.draw_text(xr - 55, y, 11, WLH, "/", 2)
  14.       self.contents.draw_text(xr - 44, y, 44, WLH, actor.maxhp, 2)
  15.     end
  16.   end
复制代码
这个方法的参数actor是Game_Actor的一个对象,把它换成Game_Enemy的一个对象就行了
比如队伍里面第一个人绘制HP条的代码是
actor = $game_party.members[0]
draw_actor_hp_gauge(actor, x, y, width)
如果是想给敌人队伍里面第一个怪兽绘制HP条则是
enemy = $game_troop.member[0]
draw_actor_hp_gauge(enemy, x, y, width)

不过这个方法只能用于窗口对象中,如果想在Sprite里面画的话就把self.contents改成self.bitmap就可以了


诡异の猫于2011-5-19 23:08补充以下内容:
补充一下,就是Enemy的数据库里面确实只有maxhp的数据,但是敌人当前的HP是通过Game_Enemy里面的@hp变量来储存的,我们在游戏里面调用的敌人一般都是Game_Enemy的对象,data_enemies只是给Game_Enemy类提供一些初始的数据

点评

呃,回错地方了,刚起来脑袋还没清醒= =  发表于 2011-5-20 13:06
恩,确实要在窗口里边画血条。我那个精灵脚本下有个Window_Dam,那里边可以画血条。用精灵的好处是血条跟着人物一起动。  发表于 2011-5-20 13:04
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
142 小时
注册时间
2011-4-1
帖子
74
4
发表于 2011-5-20 04:54:55 | 只看该作者
修改Sprite_Battler
原版在方法def update_battler_bitmap里边画血条,@battler.hp是当前血量(Game_Battler里边有定义),最大血量Game_Battler里也定义了,好像是@battler.maxhp,对了@battler是敌我通用的。
另外原版默认不显示主角动作,想要刷新主角精灵去修改Game_Actor里的def use_sprite?

如果是横版,Sideview 1 的 def make_battler 里边创建一个新精灵
这是一个简单的横版血量显示,也许可以作为参考
def make_battler 里最后加上
@hp_window = Sprite_Num.new(viewport,battler)

  def dispose里边靠中间= =
    @hp_window.dispose if @hp_window != nil

  def update里边插入倒数第四行,就是 setup_new_effect 上边
    @hp_window.update if @hp_window != nil

下边是精灵的脚本,只有数字,要是需要血条就在里边自己画
最后,脚本是我测试时候随便写的,参考而已,能不能用不敢保证
class Sprite_Num < Sprite_Base
  
  attr_accessor :battler
  
  def initialize(viewport,battler = nil)
    super(viewport)
    @battler = battler
    @damage = 0
    window(@battler.hp)  
  end
  
  def update
    if @battler.hp > 0
      @window.pop_text(@battler.hp)
      @window.x = @battler.position_x - 32
      @window.y = @battler.position_y - 5
    else
      @window.openness = 0 if @window.openness > 0
    end
  end
  
  def dispose
    super
    @window.dispose if @window != nil
  end
  
  def window(text)
    @window = Window_Dam.new(@battler.position_x - 32, @battler.position_y - 5)
    @window.pop_text(text)
  end   
  
end  

class Window_Dam < Window_Base
  #--------------------------------------------------------------------------
  # ● 客观初期化
  #--------------------------------------------------------------------------
  def initialize(x, y)
    super(x, y, 160, 46)
    self.opacity = 0
  end
  #--------------------------------------------------------------------------
  # ● 窗口内容的作成
  #--------------------------------------------------------------------------
  def create_contents
    self.contents.dispose
    self.contents = Bitmap.new(width - 32, height - 32)
  end
  #--------------------------------------------------------------------------
  # ● 状态设定
  #--------------------------------------------------------------------------
  def pop_text(text, align = 1)
    if text != @text or align != @align
      self.contents.clear
      self.width = self.contents.text_size(text).width + 36
      self.contents = Bitmap.new(width - 32, height - 32)
      self.contents.font.color = normal_color
      self.contents.font.size = 16
      self.contents.draw_text(0,-8, width - 32, 32, text, align)
      @text = text
      @align = align
    end   
  end  
end  







点评

呃 没事没事 哈哈  发表于 2011-5-20 13:07
恩,确实要在窗口里边画血条。我那个精灵脚本下有个Window_Dam,那里边可以画血条。用精灵的好处是血条跟着人物一起动。  发表于 2011-5-20 13:07
Sprite_Battler里面的update_battler_bitmap没有绘制血条吧,VX内置的貌似都是在窗口里面绘制血条的  发表于 2011-5-20 12:14
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
55
在线时间
116 小时
注册时间
2008-5-12
帖子
264
5
发表于 2011-5-20 08:09:16 | 只看该作者

不知道你是不是要这个啊?
回复

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1362
在线时间
677 小时
注册时间
2009-11-11
帖子
2790
6
发表于 2011-5-20 11:16:10 | 只看该作者
我记得有现成的显血脚本

嘿。嘿。嘿
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-1-27 06:31

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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