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

Project1

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

[已经解决] 大家帮一下忙,用了这个脚本后,角色血量不见了,怎么解

[复制链接]

Lv1.梦旅人

梦石
0
星屑
445
在线时间
5 小时
注册时间
2010-10-5
帖子
4
跳转到指定楼层
1
发表于 2012-7-24 13:56:23 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 hcm 于 2012-8-2 08:42 编辑

脚本如下:
  1. #队伍最大人数
  2. ACTORS = 5
  3. #战斗人数
  4. BATTLER_ACTORS = 5
  5. #战斗画面修补
  6. #目标 3人 200, 4人 160, 5人 120
  7. SPRITES_BATTLER = 120
  8. #游戏开始时步行图的显示(1即是角色1的步行图,如此类推)
  9. CHARACTER_GRAPHIC = 1
  10. #==============================================================================
  11. # ■ Game_Actor
  12. #------------------------------------------------------------------------------
  13. #==============================================================================

  14. class Game_Actor < Game_Battler
  15. #--------------------------------------------------------------------------
  16. # ● バトル画面 X 座标の取得
  17. #--------------------------------------------------------------------------
  18. def screen_x
  19.    # パーティ内の并び顺から X 座标を计算して返す
  20.    if self.index != nil
  21.      return self.index * SPRITES_BATTLER + 80
  22.    else
  23.      return 0
  24.    end
  25. end
  26. end


  27. #==============================================================================
  28. # ■ Game_Party
  29. #------------------------------------------------------------------------------
  30. #  パーティを扱うクラスです。ゴールドやアイテムなどの情报が含まれます。このク
  31. # ラスのインスタンスは $game_party で参照されます。
  32. #==============================================================================

  33. class Game_Party
  34. #--------------------------------------------------------------------------
  35. # ● アクターを加える
  36. #     actor_id : アクター ID
  37. #--------------------------------------------------------------------------
  38. def add_actor(actor_id)
  39.    # アクターを取得
  40.    actor = $game_actors[actor_id]
  41.    # パーティ人数が 4 人未満で、このアクターがパーティにいない场合
  42.    if @actors.size < ACTORS and not @actors.include?(actor)
  43.      # アクターを追加
  44.      @actors.push(actor)
  45.      # プレイヤーをリフレッシュ
  46.      $game_player.refresh
  47.    end
  48. end
  49. #--------------------------------------------------------------------------
  50. # ● アクターの配列
  51. #--------------------------------------------------------------------------
  52. def actors
  53.    a = []
  54.    if $game_temp.in_battle
  55.      for i in 0...[@actors.size, BATTLER_ACTORS].min
  56.        a.push(@actors[i])
  57.      end
  58.    else
  59.      a = @actors
  60.    end
  61.    return a
  62. end
  63. #--------------------------------------------------------------------------
  64. # ● フレーム更新 (ステータスウィンドウがアクティブの场合)
  65. #--------------------------------------------------------------------------
  66. def change_actor(index1, index2)
  67.    temp_skill1 = @actors[index1]
  68.    temp_skill2 = @actors[index2]
  69.    # 実际に入れ替える
  70.    @actors[index1] = temp_skill2
  71.    @actors[index2] = temp_skill1
  72. end
  73. #--------------------------------------------------------------------------
  74. # ● 全员のアクションクリア
  75. #--------------------------------------------------------------------------
  76. def clear_actions
  77.    # パーティ全员のアクションをクリア
  78.    for actor in actors
  79.      actor.current_action.clear
  80.    end
  81. end
  82. #--------------------------------------------------------------------------
  83. # ● コマンド入力可能判定
  84. #--------------------------------------------------------------------------
  85. def inputable?
  86.    # 一人でもコマンド入力可能なら true を返す
  87.    for actor in actors
  88.      if actor.inputable?
  89.        return true
  90.      end
  91.    end
  92.    return false
  93. end
  94. #--------------------------------------------------------------------------
  95. # ● 対象アクターのランダムな决定
  96. #     hp0 : HP 0 のアクターに限る
  97. #--------------------------------------------------------------------------
  98. def random_target_actor(hp0 = false)
  99.    # ルーレットを初期化
  100.    roulette = []
  101.    # ループ
  102.    for actor in actors
  103.      # 条件に该当する场合
  104.      if (not hp0 and actor.exist?) or (hp0 and actor.hp0?)
  105.        # アクターのクラスの [位置] を取得
  106.        position = $data_classes[actor.class_id].position
  107.        # 前卫のとき n = 4、中卫のとき n = 3、後卫のとき n = 2
  108.        n = 4 - position
  109.        # ルーレットにアクターを n 回追加
  110.        n.times do
  111.          roulette.push(actor)
  112.        end
  113.      end
  114.    end
  115.    # ルーレットのサイズが 0 の场合
  116.    if roulette.size == 0
  117.      return nil
  118.    end
  119.    # ルーレットを回し、アクターを决定
  120.    return roulette[rand(roulette.size)]
  121. end
  122. #--------------------------------------------------------------------------
  123. # ● 全灭判定
  124. #--------------------------------------------------------------------------
  125. def all_dead?
  126.    # パーティ人数が 0 人の场合
  127.    if $game_party.actors.size == 0
  128.      return false
  129.    end
  130.    # HP 0 以上のアクターがパーティにいる场合
  131.    for actor in actors
  132.      if actor.hp > 0
  133.        return false
  134.      end
  135.    end
  136.    # 全灭
  137.    return true
  138. end
  139. #--------------------------------------------------------------------------
  140. # ● 対象アクターのスムーズな决定
  141. #     actor_index : アクターインデックス
  142. #--------------------------------------------------------------------------
  143. def smooth_target_actor(actor_index)
  144.    # アクターを取得
  145.    actor = actors[actor_index]
  146.    # アクターが存在する场合
  147.    if actor != nil and actor.exist?
  148.      return actor
  149.    end
  150.    # ループ
  151.    for actor in actors
  152.      # アクターが存在する场合
  153.      if actor.exist?
  154.        return actor
  155.      end
  156.    end
  157. end
  158. end


  159. #==============================================================================
  160. # ■ Game_Player
  161. #------------------------------------------------------------------------------
  162. #  プレイヤーを扱うクラスです。イベントの起动判定や、マップのスクロールなどの
  163. # 机能を持っています。このクラスのインスタンスは $game_player で参照されます。
  164. #==============================================================================

  165. class Game_Player < Game_Character
  166. #--------------------------------------------------------------------------
  167. # ● リフレッシュ
  168. #--------------------------------------------------------------------------
  169. def refresh
  170.    # パーティ人数が 0 人の场合
  171.    if $game_party.actors.size == 0
  172.      # キャラクターのファイル名と色相をクリア
  173.      @character_name = ""
  174.      @character_hue = 0
  175.      # メソッド终了
  176.      return
  177.    end
  178.    # アクターを取得
  179.    if $game_party.actors.include?($game_actors[CHARACTER_GRAPHIC]) && CHARACTER_GRAPHIC != 0
  180.      actor = $game_actors[CHARACTER_GRAPHIC]
  181.    else
  182.      actor = $game_party.actors[0]
  183.    end
  184.    # キャラクターのファイル名と色相を设定
  185.    @character_name = actor.character_name
  186.    @character_hue = actor.character_hue
  187.    # 不透明度と合成方法を初期化
  188.    @opacity = 255
  189.    @blend_type = 0
  190. end
  191. end


  192. #==============================================================================
  193. # ■ Spriteset_Battle
  194. #------------------------------------------------------------------------------
  195. #  バトル画面のスプライトをまとめたクラスです。このクラスは Scene_Battle クラ
  196. # スの内部で使用されます。
  197. #==============================================================================

  198. class Spriteset_Battle
  199. #--------------------------------------------------------------------------
  200. # ● オブジェクト初期化
  201. #--------------------------------------------------------------------------
  202. def initialize
  203.    # ビューポートを作成
  204.    @viewport1 = Viewport.new(0, 0, 640, 640)#320
  205.    @viewport2 = Viewport.new(0, 0, 640, 480)
  206.    @viewport3 = Viewport.new(0, 0, 640, 480)
  207.    @viewport4 = Viewport.new(0, 0, 640, 480)
  208.    @viewport2.z = 101
  209.    @viewport3.z = 200
  210.    @viewport4.z = 5000
  211.    # バトルバックスプライトを作成
  212.    @battleback_sprite = Sprite.new(@viewport1)
  213.    # エネミースプライトを作成
  214.    @enemy_sprites = []
  215.    for enemy in $game_troop.enemies.reverse
  216.      @enemy_sprites.push(Sprite_Battler.new(@viewport1, enemy))
  217.    end
  218.    # アクタースプライトを作成
  219.    @actor_sprites = []
  220.    @actor_sprites.push(Sprite_Battler.new(@viewport2))
  221.    @actor_sprites.push(Sprite_Battler.new(@viewport2))
  222.    @actor_sprites.push(Sprite_Battler.new(@viewport2))
  223.    @actor_sprites.push(Sprite_Battler.new(@viewport2))
  224.    @actor_sprites.push(Sprite_Battler.new(@viewport2))
  225.    if BATTLER_ACTORS > 4
  226.      for i in 4...BATTLER_ACTORS
  227.        @actor_sprites.push(Sprite_Battler.new(@viewport2))
  228.      end
  229.    end
  230.    # 天候を作成
  231.    @weather = RPG::Weather.new(@viewport1)
  232.    # ピクチャスプライトを作成
  233.    @picture_sprites = []
  234.    for i in 51..100
  235.      @picture_sprites.push(Sprite_Picture.new(@viewport3,
  236.        $game_screen.pictures[i]))
  237.    end
  238.    # タイマースプライトを作成
  239.    @timer_sprite = Sprite_Timer.new
  240.    # フレーム更新
  241.    update
  242. end
  243. #--------------------------------------------------------------------------
  244. # ● フレーム更新
  245. #--------------------------------------------------------------------------
  246. alias update_actor_change update
  247. def update
  248.    if BATTLER_ACTORS > 4
  249.      for i in 4...BATTLER_ACTORS
  250.        @actor_sprites[i].battler = $game_party.actors[i]
  251.      end
  252.    end
  253.    update_actor_change
  254. end
  255. end


  256. #==============================================================================
  257. # ■ Window_MenuStatus
  258. #------------------------------------------------------------------------------
  259. #  メニュー画面でパーティメンバーのステータスを表示するウィンドウです。
  260. #==============================================================================

  261. class Window_MenuStatus < Window_Selectable
  262. #--------------------------------------------------------------------------
  263. # ● オブジェクト初期化
  264. #--------------------------------------------------------------------------
  265. def initialize
  266.    super(0, 0, 480, 480)
  267.    refresh
  268.    self.active = false
  269.    self.index = -1
  270. end
  271. #--------------------------------------------------------------------------
  272. # ● リフレッシュ
  273. #--------------------------------------------------------------------------
  274. def refresh
  275.    if self.contents != nil
  276.      self.contents.dispose
  277.      self.contents = nil
  278.    end
  279.    @item_max = $game_party.actors.size
  280.    self.contents = Bitmap.new(width - 32, self.row_max * 116 - 16)
  281.    for i in 0...$game_party.actors.size
  282.      x = 64
  283.      y = i * 116
  284.      actor = $game_party.actors[i]
  285.      draw_actor_graphic(actor, x - 40, y + 80)
  286.      draw_actor_name(actor, x, y)
  287.      draw_actor_class(actor, x + 144, y)
  288.      draw_actor_level(actor, x, y + 32)
  289.      draw_actor_state(actor, x + 90, y + 32)
  290.      draw_actor_exp(actor, x, y + 64)
  291.      draw_actor_hp(actor, x + 236, y + 32)
  292.      draw_actor_sp(actor, x + 236, y + 64)
  293.    end
  294. end
  295. #--------------------------------------------------------------------------
  296. # ● カーソル矩形更新
  297. #--------------------------------------------------------------------------
  298. def update_cursor_rect
  299.    # カーソル位置が 0 未満の场合
  300.    if @index < 0
  301.      self.cursor_rect.empty
  302.      return
  303.    end
  304.    # 现在の行を取得
  305.    row = @index
  306.    # 现在の行が、表示されている先头の行より前の场合
  307.    if row < self.top_row
  308.      # 现在の行が先头になるようにスクロール
  309.      self.top_row = row
  310.    end
  311.    # 现在の行が、表示されている最後尾の行より後ろの场合
  312.    if row > self.top_row + (self.page_row_max - 1)
  313.      # 现在の行が最後尾になるようにスクロール
  314.      self.top_row = row - (self.page_row_max - 1)
  315.    end
  316.    # カーソルの幅を计算
  317.    cursor_width = self.width - 32
  318.    # カーソルの座标を计算
  319.    x = @index % @column_max * (cursor_width + 32)
  320.    y = @index / @column_max * 116 - self.oy
  321.    # カーソルの矩形を更新
  322.    self.cursor_rect.set(x, y, self.width - 32, 100)
  323. end
  324. #--------------------------------------------------------------------------
  325. # ● 先头の行の取得
  326. #--------------------------------------------------------------------------
  327. def top_row
  328.    # ウィンドウ内容の転送元 Y 座标を、1 行の高さ 116 で割る
  329.    return self.oy / 116
  330. end
  331. #--------------------------------------------------------------------------
  332. # ● 先头の行の设定
  333. #     row : 先头に表示する行
  334. #--------------------------------------------------------------------------
  335. def top_row=(row)
  336.    # row が 0 未満の场合は 0 に修正
  337.    if row < 0
  338.      row = 0
  339.    end
  340.    # row が row_max - 1 超の场合は row_max - 1 に修正
  341.    if row > row_max - 1
  342.      row = row_max - 1
  343.    end
  344.    # row に 1 行の高さ 116 を挂け、ウィンドウ内容の転送元 Y 座标とする
  345.    self.oy = row * 116
  346. end
  347. #--------------------------------------------------------------------------
  348. # ● 1 ページに表示できる行数の取得
  349. #--------------------------------------------------------------------------
  350. def page_row_max
  351.    return 4
  352. end
  353. end


  354. #==============================================================================
  355. # ■ Window_BattleStatus
  356. #------------------------------------------------------------------------------
  357. #  バトル画面でパーティメンバーのステータスを表示するウィンドウです。
  358. #==============================================================================

  359. class Window_BattleStatus < Window_Base
  360. #--------------------------------------------------------------------------
  361. # ● オブジェクト初期化
  362. #--------------------------------------------------------------------------
  363. alias initialize_KGC_LargeParty initialize
  364. def initialize
  365.    # 元の処理を実行
  366.    initialize_KGC_LargeParty
  367.    # レベルアップフラグを再作成
  368.    @level_up_flags = []
  369.    for i in 0...BATTLER_ACTORS
  370.      @level_up_flags[i] = false
  371.    end
  372. end
  373. #--------------------------------------------------------------------------
  374. # ● リフレッシュ
  375. #--------------------------------------------------------------------------
  376. def refresh
  377.    self.contents.clear
  378.    self.contents.font.color = system_color
  379. #    self.contents.font.size = 18
  380. #    self.contents.draw_text(0, 32, 24, 32, "HP")
  381. #    self.contents.draw_text(0, 64, 24, 32, "MP")
  382.    @item_max = $game_party.actors.size
  383. #    self.contents.font.size = 20
  384.    for i in 0...$game_party.actors.size
  385.      actor = $game_party.actors[i]
  386.      actor_x = i * SPRITES_BATTLER + 4
  387.     # draw_actor_name(actor, actor_x, 0)
  388.    #  draw_actor_hp(actor, actor_x, 32, 120)
  389.     # draw_actor_sp(actor, actor_x, 64, 120)
  390.     if @level_up_flags[i]
  391.        self.contents.font.color = normal_color
  392.        self.contents.draw_text(actor_x, 96, 120, 32, "LEVEL UP!")
  393.      else
  394.        #draw_actor_state(actor, actor_x, 96)
  395.      end
  396.    end
  397. end
  398. end


  399. #==============================================================================
  400. # ■ Scene_Menu
  401. #------------------------------------------------------------------------------
  402. #  メニュー画面の処理を行うクラスです。
  403. #==============================================================================

  404. class Scene_Menu
  405. #--------------------------------------------------------------------------
  406. # ● オブジェクト初期化
  407. #     menu_index : コマンドのカーソル初期位置
  408. #--------------------------------------------------------------------------
  409. def initialize(menu_index = 0)
  410.    @menu_index = menu_index
  411.    @actor_change = false
  412.    @actor_index = nil
  413. end
  414. #--------------------------------------------------------------------------
  415. # ● フレーム更新 (コマンドウィンドウがアクティブの场合)
  416. #--------------------------------------------------------------------------
  417. alias update_command_actor_change update_command
  418. def update_command
  419.    # 元の処理を実行
  420.    update_command_actor_change
  421.    # 方向ボタンの左か右が押された场合
  422.    if Input.trigger?(Input::LEFT) || Input.trigger?(Input::RIGHT)
  423.      # 决定 SE を演奏
  424.      $game_system.se_play($data_system.decision_se)
  425.      @command_window.active = false
  426.      @status_window.active = true
  427.      @status_window.index = 0
  428.      @actor_change = true
  429.      @actor_index = nil
  430.      return
  431.    end
  432. end
  433. #--------------------------------------------------------------------------
  434. # ● フレーム更新 (ステータスウィンドウがアクティブの场合)
  435. #--------------------------------------------------------------------------
  436. def update_status
  437.    # B ボタンが押された场合
  438.    if Input.trigger?(Input::B)
  439.      # キャンセル SE を演奏
  440.      $game_system.se_play($data_system.cancel_se)
  441.      # コマンドウィンドウをアクティブにする
  442.      @command_window.active = true
  443.      @status_window.active = false
  444.      @status_window.index = -1
  445.      @actor_change = false
  446.      return
  447.    end
  448.    # C ボタンが押された场合
  449.    if Input.trigger?(Input::C)
  450.      if @actor_change
  451.        # 决定 SE を演奏
  452.        $game_system.se_play($data_system.decision_se)
  453.        if @actor_index == nil
  454.          @actor_index = @status_window.index
  455.        else
  456.          $game_party.change_actor(@actor_index, @status_window.index)
  457.          @actor_index = nil
  458.          @status_window.refresh
  459.          if $game_party.actors.include?($game_actors[CHARACTER_GRAPHIC]) == false || CHARACTER_GRAPHIC == 0
  460.            $game_player.refresh
  461.          end
  462.        end
  463.        return
  464.      else
  465.        # コマンドウィンドウのカーソル位置で分岐
  466.        case @command_window.index
  467.        when 1  # スキル
  468.          # このアクターの行动制限が 2 以上の场合
  469.          if $game_party.actors[@status_window.index].restriction >= 2
  470.            # ブザー SE を演奏
  471.            $game_system.se_play($data_system.buzzer_se)
  472.            return
  473.          end
  474.          # 决定 SE を演奏
  475.          $game_system.se_play($data_system.decision_se)
  476.          # スキル画面に切り替え
  477.          $scene = Scene_Skill.new(@status_window.index)
  478.        when 2  # 装备
  479.          # 决定 SE を演奏
  480.          $game_system.se_play($data_system.decision_se)
  481.          # 装备画面に切り替え
  482.          $scene = Scene_Equip.new(@status_window.index)
  483.        when 3  # ステータス
  484.          # 决定 SE を演奏
  485.          $game_system.se_play($data_system.decision_se)
  486.          # ステータス画面に切り替え
  487.          $scene = Scene_Status.new(@status_window.index)
  488.        end
  489.        return
  490.      end
  491.    end
  492. end
  493. end

  494. #==============================================================================
  495. # ■ Scene_Battle (分割定义 2)
  496. #------------------------------------------------------------------------------
  497. #  バトル画面の処理を行うクラスです。
  498. #==============================================================================

  499. class Scene_Battle
  500. #--------------------------------------------------------------------------
  501. # ● アクターコマンドウィンドウのセットアップ
  502. #--------------------------------------------------------------------------
  503. alias phase3_setup_command_window_actor_change phase3_setup_command_window
  504. def phase3_setup_command_window
  505.    # 元の処理を実行
  506.    phase3_setup_command_window_actor_change
  507.    # アクターコマンドウィンドウの位置を设定
  508.    @actor_command_window.x = @actor_index * SPRITES_BATTLER
  509. end
  510. end
复制代码
原来想改变战斗人数的......

Lv3.寻梦者

昨日的黄昏

梦石
0
星屑
1005
在线时间
937 小时
注册时间
2006-11-5
帖子
4128

第2届短篇游戏比赛季军第3届短篇游戏大赛小游戏及其他组季军

2
发表于 2012-7-24 14:28:45 | 只看该作者
= =重定义了 Window_BattleStatus和Window_MenuStatus啊

有很简单方法解决,你把显示血条的脚本移动到这个脚本的下面就可以了…………吧……
[url=http://weibo.com/2238291690?s=6uyXnP]
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
445
在线时间
5 小时
注册时间
2010-10-5
帖子
4
3
 楼主| 发表于 2012-7-27 21:12:03 | 只看该作者
七夕小雨 发表于 2012-7-24 14:28
= =重定义了 Window_BattleStatus和Window_MenuStatus啊

有很简单方法解决,你把显示血条的脚本移动到这个 ...

嗯,之前就试过了,没用,不过现在放弃了,改那个可以换人的脚本了,效果不错,不过还是谢谢了。
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
445
在线时间
5 小时
注册时间
2010-10-5
帖子
4
4
 楼主| 发表于 2012-8-1 21:49:26 | 只看该作者
哈,果真没有吗.....没办法啊,用小树凑活??
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
55
在线时间
114 小时
注册时间
2012-3-26
帖子
47
5
发表于 2012-8-2 01:27:28 | 只看该作者
把Window_BattleStatus放到这脚本下,再把38行的160改为120就行了。
再起不能
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-30 10:14

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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