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

Project1

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

[已经过期] 显示多种状态的脚本 队友战斗中加入 状态错位

[复制链接]

Lv2.观梦者

梦石
0
星屑
342
在线时间
101 小时
注册时间
2013-9-10
帖子
46
跳转到指定楼层
1
发表于 2013-12-15 22:50:48 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 guti4444 于 2013-12-15 22:53 编辑
  1. #============================================================================================
  2. # 本脚本来自www.66RPG.com,由sdxsdx转载。使用请保留此信息
  3. #============================================================================================
  4. #============================================
  5. #  自定义
  6. #============================================
  7. class Window_BattleStatus < Window_Base
  8.   STATE_DRAW_FRAME     = 20   # 状态框的间隔
  9.   STATE_DRAW_X         = 160  # X 坐标
  10.   STATE_DRAW_Y         = 77   # Y 坐标
  11.   STATE_DRAW_COLOR_USE = true # 文字颜色是否有效
  12.   #--------------------------------------------------------------------------
  13.   # ● ステートの文字色設定
  14.   #     actor       : アクター
  15.   #     text        : 描画文字列
  16.   #--------------------------------------------------------------------------
  17.   def state_font_color(actor, text)
  18.     if STATE_DRAW_COLOR_USE
  19.       color = normal_color
  20.       case text
  21.       when "[正常]"
  22.         color = normal_color
  23.       when "[战斗不能]"
  24.         color = knockout_color
  25.       when "[眩晕]"
  26.         color = normal_color
  27.       when "[毒]"
  28.         color = Color.new(128, 255, 128, 255)
  29.       when "[幻惑]"
  30.         color = Color.new(255, 255, 128, 255)
  31.       when "[沈黙]"
  32.         color = Color.new(160, 160, 160, 255)
  33.       when "[混乱]"
  34.         color = Color.new(200, 255, 140, 255)
  35.       when "[睡眠]"
  36.         color = Color.new(64, 64, 200, 255)
  37.       when "[麻痺]"
  38.         color = Color.new(128, 255, 255, 255)
  39.       when "[ウィークン]","[クラムジー]","[ディレイ]","[フィーブル]"
  40.         color = Color.new(128, 128, 128, 255)
  41.       when "[シャープ]","[バリア]","[レジスト]","[ブリンク]"
  42.         color = Color.new(128, 128, 255, 255)
  43.       end
  44.     else
  45.       # STATE_DRAW_COLOR_USEがfalseの場合はデフォの処理(戦闘不能のみ赤で描画)
  46.       color = actor.hp == 0 ? knockout_color : normal_color
  47.     end
  48.     @state_sprite.bitmap.font.color = color
  49.   end
  50.   attr_accessor :state_count
  51.   alias window_battlestatus_state_draw_initialize initialize
  52.   def initialize
  53.     window_battlestatus_state_draw_initialize
  54.     # ステート表示用のカウンタを作成
  55.     @state_count = 0
  56.     # ステート表示用のスプライトを作成
  57.     @state_sprite = Sprite.new(self.viewport)
  58.     @state_sprite.bitmap = Bitmap.new(self.width - 32, self.height - 32)
  59.     @state_sprite.x = self.x + 16
  60.     @state_sprite.y = self.y + 16
  61.     @state_sprite.z = self.z + 2
  62.     # ステート表示用スプライトをリフレッシュ
  63.     state_draw_refresh
  64.   end
  65.   alias window_battlestatus_state_draw_dispose dispose
  66.   def dispose
  67.     window_battlestatus_state_draw_dispose
  68.     # ステート表示用スプライトを開放
  69.     @state_sprite.dispose
  70.   end
  71.   #--------------------------------------------------------------------------
  72.   # ● 描画用のステート文字列作成
  73.   #     actor       : アクター
  74.   #     width       : 描画先の幅
  75.   #     need_normal : [正常] が必要かどうか (true / false)
  76.   #--------------------------------------------------------------------------
  77.   def make_battler_state_text(battler, width, need_normal)
  78.     # 括弧の幅を取得
  79. #    brackets_width = self.contents.text_size("[]").width
  80.     # ステート名の文字列を作成
  81.     text = ""
  82.     # 実際表示するステートの配列作成
  83.     show_state = []
  84.     for i in battler.states
  85.       if $data_states[i].rating >= 1
  86.         show_state.push($data_states[i].name)
  87.       end
  88.     end
  89.     # 表示ステートの配列が空の場合は "[正常]" にする
  90.     if show_state.size == 0
  91.       if need_normal
  92.         text = "[正常]"
  93.       else
  94.         text = ""
  95.       end
  96.     else
  97.       # カウントに見合ったステートを文字列に設定
  98.       text = show_state[(@state_count / STATE_DRAW_FRAME) % show_state.size]
  99.       # 括弧をつける
  100.       text = "[" + text + "]"
  101.     end
  102.     # 完成した文字列を返す
  103.     return text
  104.   end  
  105.    
  106.   def state_draw_refresh
  107.     # ステート表示用のカウントを増加
  108.     @state_count += 1
  109.     # ステート更新間隔でなく、最初の更新時でなければ更新しない
  110.     return if @state_count % STATE_DRAW_FRAME != 0 and @state_count != 1
  111.     @state_sprite.bitmap.clear
  112.     for i in 0...$game_party.actors.size
  113.       actor = $game_party.actors[i]
  114.       actor_x = i * STATE_DRAW_X + 4
  115.       if @level_up_flags[i]
  116.         @state_sprite.bitmap.font.color = normal_color
  117.         @state_sprite.bitmap.draw_text(actor_x, STATE_DRAW_Y, 120, 32, "LEVEL UP!")
  118.       else
  119.         text = make_battler_state_text(actor, 120, true)
  120.         state_font_color(actor, text)
  121.         @state_sprite.bitmap.draw_text(actor_x, STATE_DRAW_Y, 120, 32, text)
  122.       end
  123.     end
  124.   end
  125.   
  126.   #def draw_actor_state(actor, x, y, width = 120)
  127.     # 通常のdraw_actor_stateを実行させない為のダミー
  128.   #end
  129. end
  130. class Scene_Battle
  131.   alias scene_battle_state_draw_update update
  132.   def update
  133.     # update毎にステート表示を更新
  134.     @status_window.state_draw_refresh
  135.     scene_battle_state_draw_update
  136.   end
  137. end
复制代码
第一张图是一个人的时候 状态位置是正确的

第二张图是一个人的时候 战斗中加入第二个人 状态位置就没有随着队员加入而变化

第三张图是两个人直接进入战斗的时候 状态位置也是正确的

就这一个小bug 我整了几个小时 搞不定 哎 求看看脚本 哪里刷新还是什么的
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

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

GMT+8, 2024-9-30 06:21

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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