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

Project1

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

[已经解决] 怎么改变RTAB伤害数字的位置

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
51 小时
注册时间
2012-8-16
帖子
52
跳转到指定楼层
1
发表于 2012-8-22 11:16:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 Kimu 于 2012-8-22 11:53 编辑

脚本如下
  1. ダメージ表示改造(RTAB用) ver 1.02
  2. # 配布元・サポートURL
  3. # [url]http://members.jcom.home.ne.jp/cogwheel/[/url]

  4. class Scene_Battle
  5.   alias :atb_setup_original :atb_setup
  6.   def atb_setup
  7.     for path in ["num", "critical", "miss", "levelup", "newskill", "learning"]
  8.       RPG::Cache.numeric(path)
  9.     end
  10.     atb_setup_original
  11.   end
  12. end

  13. module RPG
  14.   class Sprite < ::Sprite
  15.     WIDTH = 18                  # 文字幅
  16.     HEIGHT = 120                 # クリティカルの文字・高さ
  17.     def damage(value, critical, type = 0)
  18.       if value.is_a?(Numeric)
  19.         damage_string = value.abs.to_s
  20.       else
  21.         damage_string = value.to_s
  22.       end
  23.       if value.is_a?(Numeric) and value >= 0
  24.         if type == 0
  25.           if critical
  26.             d_bitmap = draw_damage(value, 1)
  27.           else
  28.             d_bitmap = draw_damage(value, 0)
  29.           end
  30.         else
  31.           d_bitmap = draw_damage(value, 2)
  32.         end
  33.       else
  34.         if type == 0
  35.           d_bitmap = draw_damage(value, 3)
  36.         else
  37.           d_bitmap = draw_damage(value, 4)
  38.         end
  39.       end
  40.       if type == 2
  41.         d_bitmap = draw_damage(value, 5)
  42.       end
  43.       num = @_damage.size
  44.       if type != 2
  45.         @_damage.push([::Sprite.new, 40, 0, rand(40) - 20, rand(30) + 50])
  46.       else
  47.         @_damage.push([::Sprite.new, 40, 0, rand(20) - 10, rand(20) + 60])
  48.       end
  49.       @_damage[num][0].bitmap = d_bitmap
  50.       @_damage[num][0].ox = d_bitmap.width / 2
  51.       @_damage[num][0].oy = d_bitmap.height / 2
  52.       if self.battler.is_a?(Game_Actor)
  53.         @_damage[num][0].ox = d_bitmap.width / 2 + 200
  54.         @_damage[num][0].x = self.x + self.viewport.ox        
  55.         @_damage[num][0].y = self.y - self.oy / 2
  56.       else
  57.         @_damage[num][0].x = self.x + self.viewport.rect.x -
  58.                             self.ox + self.src_rect.width / 2
  59.         @_damage[num][0].y = self.y - self.oy * self.zoom_y / 2 +
  60.                             self.viewport.rect.y
  61.         @_damage[num][0].zoom_x = self.zoom_x
  62.         @_damage[num][0].zoom_y = self.zoom_y
  63.         @_damage[num][0].z = 3000
  64.       end
  65.     end
  66.     def draw_damage(value, element)
  67.       width = 0
  68.       if value.is_a?(Numeric)
  69.         value = value.abs
  70.         fig = value.to_s.size - 1
  71.         file = RPG::Cache.numeric("num")
  72.         d_width = WIDTH * fig + file.rect.width / 10
  73.         if element == 1
  74.           critical = RPG::Cache.numeric("critical")
  75.           d_width = [d_width, critical.rect.width].max
  76.           d_bitmap = Bitmap.new(d_width+36, HEIGHT + file.rect.height / 5)
  77.           d_x = 0#(width - critical.rect.width / 10) / 2
  78.           d_bitmap.blt(d_x+fig*(fig/1.6), 0, critical, critical.rect)
  79.          # 会心一击表现效果强化
  80.           Audio.se_play("Audio/SE/"+"Clip10",100,100)
  81.       $game_screen.start_flash(Color.new(255,255,255),10)
  82.        $game_screen.start_shake(3,9,10)
  83.         else
  84.           d_bitmap = Bitmap.new(d_width, HEIGHT + file.rect.height / 5)
  85.         end
  86.         d_x = ((d_width) - (WIDTH * fig + file.rect.width / 10)) / 2
  87.         while fig >= 0
  88.           d_bitmap.blt(d_x, HEIGHT, file, Rect.new((value / (10 ** fig)) *
  89.             file.rect.width / 10, element * file.rect.height / 5,
  90.             file.rect.width / 10, file.rect.height / 5))
  91.           d_x += WIDTH
  92.           value %= 10 ** fig
  93.           fig -= 1
  94.         end
  95.       else
  96.         case value
  97.         when "Miss"
  98.           file = RPG::Cache.numeric("miss")
  99.         when "等级提升!"
  100.           file = RPG::Cache.numeric("levelup")
  101.         when "New Skill!"
  102.           file = RPG::Cache.numeric("newskill")
  103.         when "Learning!"
  104.           file = RPG::Cache.numeric("learning")
  105.         else
  106.           return Bitmap.new(1, 1)
  107.         end
  108.         d_bitmap = file
  109.       end
  110.       return d_bitmap
  111.     end
  112.   end
  113.   module Cache
  114.     def self.numeric(filename)
  115.       self.load_bitmap("Graphics/String/", filename)
  116.     end
  117.   end
  118. end
复制代码

评分

参与人数 1星屑 -10 收起 理由
Kimu -10 代码框手续费

查看全部评分

Lv2.观梦者

梦石
0
星屑
928
在线时间
228 小时
注册时间
2011-8-22
帖子
834
2
发表于 2012-8-22 12:02:53 | 只看该作者
本帖最后由 艾拉·贝尔 于 2012-8-22 12:05 编辑

我用的是超长的一种 貌似是最早期的吧。我的脚本描绘坐标区域 [我认为是该这块]

  #--------------------------------------------------------------------------
  # ● ATG の描画
  #     actor : アクター
  #     x     : 描画先 X 座標
  #     y     : 描画先 Y 座標
  #     width : 描画先の幅
  #--------------------------------------------------------------------------
  def draw_actor_atg(actor, x, y, width = 144)
    if @at_gauge == nil
      # plus_x:X座標の位置補正 rate_x:X座標の位置補正(%) plus_y:Y座標の位置補正
      # plus_width:幅の補正 rate_width:幅の補正(%) height:縦幅
      # align1:描画タイプ1 0:左詰め 1:中央揃え 2:右詰め
      # align2:描画タイプ2 0:上詰め 1:中央揃え 2:下詰め
      # align3:ゲージタイプ 0:左詰め 1:右詰め
      @plus_x = 0
      @rate_x = 0
      @plus_y = 16
      @plus_width = 0
      @rate_width = 100
      @width = @plus_width + width * @rate_width / 100
      @height = 16
      @align1 = 0
      @align2 = 1
      @align3 = 0
      # グラデーション設定 grade1:空ゲージ grade2:実ゲージ
      # (0:横にグラデーション 1:縦にグラデーション 2:斜めにグラデーション)
      grade1 = 1
      grade2 = 0
      # 色設定。color1:最外枠,color2:中枠
      # color3:空枠ダークカラー,color4:空枠ライトカラー
      color1 = Color.new(0, 0, 0)
      color2 = Color.new(255, 255, 192)
      color3 = Color.new(0, 0, 0, 192)
      color4 = Color.new(0, 0, 64, 192)
      # ゲージの色設定
      # 通常時の色設定
      color5 = Color.new(0, 64, 80)
      color6 = Color.new(0, 128, 160)
      # ゲージがMAXの時の色設定
      color7 = Color.new(80, 0, 0)
      color8 = Color.new(240, 0, 0)
      # 連携スキル使用時の色設定
      color9 = Color.new(80, 64, 32)
      color10 = Color.new(240, 192, 96)
      # スキル詠唱時の色設定
      color11 = Color.new(80, 0, 64)
      color12 = Color.new(240, 0, 192)
      # ゲージの描画
      gauge_rect_at(@width, @height, @align3, color1, color2,
                  color3, color4, color5, color6, color7, color8,
                  color9, color10, color11, color12, grade1, grade2)
    end
    # 変数atに描画するゲージの幅を代入
    if actor.rtp == 0
      at = (width + @plus_width) * actor.atp * @rate_width / 10000
    else
      at = (width + @plus_width) * actor.rt * @rate_width / actor.rtp / 100
    end
    if at > width
      at = width
    end
    # ゲージの左詰・中央構え等の補正
    case @align1
    when 1
      x += (@rect_width - width) / 2
    when 2
      x += @rect_width - width
    end
    case @align2
    when 1
      y -= @height / 2
    when 2
      y -= @height
    end
    self.contents.blt(x + @plus_x + width * @rate_x / 100, y + @plus_y,
                      @at_gauge, Rect.new(0, 0, @width, @height))
    if @align3 == 0
      rect_x = 0
    else
      x += @width - at - 1
      rect_x = @width - at - 1
    end
    # ゲージの色設定
    if at == width
        # MAX時のゲージ描画
      self.contents.blt(x + @plus_x + @width * @rate_x / 100, y + @plus_y,
                        @at_gauge, Rect.new(rect_x, @height * 2, at, @height))
    else
      if actor.rtp == 0
        # 通常時のゲージ描画
        self.contents.blt(x + @plus_x + @width * @rate_x / 100, y + @plus_y,
                          @at_gauge, Rect.new(rect_x, @height, at, @height))
      else
        if actor.spell == true
          # 連携スキル使用時のゲージ描画
          self.contents.blt(x + @plus_x + @width * @rate_x / 100, y + @plus_y,
                        @at_gauge, Rect.new(rect_x, @height * 3, at, @height))
        else
          # スキル詠唱時のゲージ描画
          self.contents.blt(x + @plus_x + @width * @rate_x / 100, y + @plus_y,
                        @at_gauge, Rect.new(rect_x, @height * 4, at, @height))
        end
      end
    end
  end
end

我这块如果你也有应该我们用的是一个版本 里面有坐标,你可以改改试试看,之后再模拟战斗,模拟战斗用的就是脚本,之后你可以看看他是怎么运动的就好改了。你的那个部分貌似是主处理,但是我是认为他的坐标和颜色处理是在这一块的。



不过我还是认为我要说说 求采纳的说,。
因为是日文版,所以我把这个部分拆开给你看

  def draw_actor_atg(actor, x, y, width = 144)
    if @at_gauge == nil
      # plus_x:X座標の位置補正 rate_x:X座標の位置補正(%) plus_y:Y座標の位置補正
      # plus_width:幅の補正 rate_width:幅の補正(%) height:縦幅
      # align1:描画タイプ1 0:左詰め 1:中央揃え 2:右詰め
      # align2:描画タイプ2 0:上詰め 1:中央揃え 2:下詰め
      # align3:ゲージタイプ 0:左詰め 1:右詰め
      @plus_x = 0
      @rate_x = 0
      @plus_y = 16
      @plus_width = 0
      @rate_width = 100
      @width = @plus_width + width * @rate_width / 100
      @height = 16
      @align1 = 0
      @align2 = 1
      @align3 = 0

plusX:是更正X坐标
rate_x:是更正X坐标的百分比
plus_y:更正Y坐标
rate_Y:更真Y坐标的百分比

简单解释就是你要改动这个坐标,但是不想过于过去,可以用百分比写进去,移动就是1的一小份

align1:描画类型一
align2:描画类型2
align3:标准类型/衡量类型
0:左边 1:中央 2:右边

回头看下面,改动下面的数值,你的数字应该就可以动了
      @plus_x = 0
      @rate_x = 0
      @plus_y = 16
      @plus_width = 0
      @rate_width = 100
      @width = @plus_width + width * @rate_width / 100
      @height = 16
      @align1 = 0
      @align2 = 1
      @align3 = 0

具体位置描述:
      # グラデーション設定 grade1:空ゲージ grade2:実ゲージ
      # (0:横にグラデーション 1:縦にグラデーション 2:斜めにグラデーション)
      grade1 = 1
      grade2 = 0

改变的话下面应该也要变 ,color,是指颜色可以自己调整,[我这里没有动]那么接下来是情况状况出现要改动的坐标位置,按照解释改动坐标。

if actor.rtp == 0
        # 通常状况下
        self.contents.blt(x + @plus_x + @width * @rate_x / 100, y + @plus_y,
                          @at_gauge, Rect.new(rect_x, @height, at, @height))

      else
        if actor.spell == true
          # 連携技能使用时候的描绘
          self.contents.blt(x + @plus_x + @width * @rate_x / 100, y + @plus_y,
                        @at_gauge, Rect.new(rect_x, @height * 3, at, @height))

        else
          # 咏唱魔法所使用的描绘
          self.contents.blt(x + @plus_x + @width * @rate_x / 100, y + @plus_y,
                        @at_gauge, Rect.new(rect_x, @height * 4, at, @height))


[红色部分为可改动位置,里面的数值自己变换,但是别乱改,要不然战斗不行你就要悔恨终身了。]

结论:

出现的数字你可以自己去定,但是我建议你改一个地方就模拟战斗看一下,脚本最好复制一份,以防出错,毕竟是日本人写的,日本人最清楚啊。如果改动最低上的没有用就还原试试下面如果都不行就全部改动。可能也会出现战斗无法开始,那你就要看看你把那个地方给改错了咯。里面某些位置我是翻译出来的文字,所以可能会复制进去不能用,你最好用原始的脚本,并且只改动坐标那块就行了。

【脚本见解,如果有不足请其他人继续补充]

评分

参与人数 1梦石 +2 收起 理由
hcm + 2 认可答案

查看全部评分

樱下乐,爱中伤,纷飞似美,却是伤。音萧萧,纷茫茫,吾知吾之伤?

测评申请帖:【请点击这里】
求评前必看:【请点击这里】
最新测评游戏:剧情解密;短⑨参赛作品《迷宫旅者》【请戳入】
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
51 小时
注册时间
2012-8-16
帖子
52
3
 楼主| 发表于 2012-8-22 21:46:01 | 只看该作者
艾拉·贝尔 发表于 2012-8-22 12:02
我用的是超长的一种 貌似是最早期的吧。我的脚本描绘坐标区域 [我认为是该这块]

  #--------------------- ...

。。。你没看我的脚本,不是你那个版本
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
251 小时
注册时间
2009-11-13
帖子
453
4
发表于 2012-8-22 21:59:51 | 只看该作者
      @_damage[num][0].ox = d_bitmap.width / 2

      @_damage[num][0].oy = d_bitmap.height / 2

      if self.battler.is_a?(Game_Actor)

        @_damage[num][0].ox = d_bitmap.width / 2 + 200

        @_damage[num][0].x = self.x + self.viewport.ox        

        @_damage[num][0].y = self.y - self.oy / 2

      else

        @_damage[num][0].x = self.x + self.viewport.rect.x -

                            self.ox + self.src_rect.width / 2

        @_damage[num][0].y = self.y - self.oy * self.zoom_y / 2 +

                            self.viewport.rect.y

        @_damage[num][0].zoom_x = self.zoom_x

        @_damage[num][0].zoom_y = self.zoom_y

        @_damage[num][0].z = 3000

我只在你脚本里发现这一段,是关于坐标的,具体的不太懂,
if、else等等分开的脚本是对应显示的坐标情况。
你可以自己慢慢的试。
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
51 小时
注册时间
2012-8-16
帖子
52
5
 楼主| 发表于 2012-8-22 22:18:06 | 只看该作者
zxcgood2009 发表于 2012-8-22 21:59
@_damage[num][0].ox = d_bitmap.width / 2

      @_damage[num][0].oy = d_bitmap.height / 2

这我也懂是关于坐标的。。


‘‘──工腾小Z于2012-8-22 22:18补充以下内容:

这我也懂是关于坐标的。。
’’
回复

使用道具 举报

Lv2.观梦者

梦石
0
星屑
928
在线时间
228 小时
注册时间
2011-8-22
帖子
834
6
发表于 2012-8-23 12:00:33 | 只看该作者
工腾小Z 发表于 2012-8-22 21:46
。。。你没看我的脚本,不是你那个版本

RTAB基本是这样 你哪个版本是在66找的么
樱下乐,爱中伤,纷飞似美,却是伤。音萧萧,纷茫茫,吾知吾之伤?

测评申请帖:【请点击这里】
求评前必看:【请点击这里】
最新测评游戏:剧情解密;短⑨参赛作品《迷宫旅者》【请戳入】
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-1-12 07:45

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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