Project1

标题: Windows_BattleStatus 更新! [打印本页]

作者: Rion幻音    时间: 2010-10-18 00:45
标题: Windows_BattleStatus 更新!
本帖最后由 Rion幻音 于 2010-10-18 11:18 编辑

因为只是修改坐标……所以不敢以原创发布……

截图


脚本
  1. #==============================================================================
  2. # ■ Window_BattleStatus
  3. #------------------------------------------------------------------------------
  4. #   作者:Rion幻音
  5. #   来自:66RPG
  6. #  显示战斗画面同伴状态的窗口。
  7. #==============================================================================

  8. class Window_BattleStatus < Window_Selectable
  9.   #--------------------------------------------------------------------------
  10.   # ● 初始化对像
  11.   #--------------------------------------------------------------------------
  12.   def initialize
  13.     super(0, 0, 416, 128)
  14.     refresh
  15.     self.active = false
  16.   end
  17.   #--------------------------------------------------------------------------
  18.   # ● 释放
  19.   #--------------------------------------------------------------------------
  20.   def dispose
  21.     super
  22.   end
  23.   #--------------------------------------------------------------------------
  24.   # ● 刷新
  25.   #--------------------------------------------------------------------------
  26.   def refresh
  27.     self.contents.clear
  28.     @item_max = $game_party.members.size
  29.     for i in 0...@item_max
  30.       draw_item(i)
  31.     end
  32.   end
  33.   #--------------------------------------------------------------------------
  34.   # ● 描绘项目
  35.   #     index : 项目索引
  36.   #--------------------------------------------------------------------------
  37.     def draw_item(index)
  38.     rect = item_rect(index)
  39.     rect.x += 4
  40.     rect.width -= 8
  41.     self.contents.clear_rect(rect)
  42.     self.contents.font.color = normal_color
  43.     @item_max = $game_party.members.size
  44.     for actor in $game_party.members
  45.     draw_actor_face(actor,actor.index*96, 0)
  46.     draw_actor_name(actor,actor.index*96, 0)
  47.     draw_actor_state(actor,actor.index*96, 24)  
  48.     draw_actor_hp(actor,actor.index*96, 54,96)
  49.     draw_actor_mp(actor,actor.index*96, 72,96)
  50.   end
  51. end
  52.     def update_cursor
  53.     if @index < 0
  54.       self.cursor_rect.empty
  55.     else
  56.       self.cursor_rect.set(@index * 96, 0, 96, 96)
  57.     end
  58.   end
  59. end
复制代码
更新项目!!!

(感谢oikl1268以及九大的指出)
截图

脚本
  1. #==============================================================================
  2. # ■ Window_BattleStatus
  3. #------------------------------------------------------------------------------
  4. #   作者:Rion幻音
  5. #   来自:66RPG
  6. #  显示战斗画面同伴状态的窗口。
  7. #==============================================================================

  8. class Window_BattleStatus < Window_Selectable
  9.   #--------------------------------------------------------------------------
  10.   # ● 初始化对像
  11.   #--------------------------------------------------------------------------
  12.   def initialize
  13.     super(0, 0, 544, 128)
  14.     refresh
  15.     self.active = false
  16.   end
  17.   #--------------------------------------------------------------------------
  18.   # ● 释放
  19.   #--------------------------------------------------------------------------
  20.   def dispose
  21.     super
  22.   end
  23.   #--------------------------------------------------------------------------
  24.   # ● 刷新
  25.   #--------------------------------------------------------------------------
  26.   def refresh
  27.     self.contents.clear
  28.     @item_max = $game_party.members.size
  29.     for i in 0...@item_max
  30.       draw_item(i)
  31.     end
  32.   end
  33.   #--------------------------------------------------------------------------
  34.   # ● 描绘项目
  35.   #     index : 项目索引
  36.   #--------------------------------------------------------------------------
  37.     def draw_item(index)
  38.     rect = item_rect(index)
  39.     rect.x += 4
  40.     rect.width -= 8
  41.     self.contents.clear_rect(rect)
  42.     self.contents.font.color = normal_color
  43.     @item_max = $game_party.members.size
  44.     for actor in $game_party.members
  45.     draw_actor_face(actor,actor.index*128, 0)
  46.     draw_actor_name(actor,actor.index*128, 0)
  47.     draw_actor_state(actor,actor.index*128, 24)  
  48.     draw_actor_hp(actor,actor.index*128, 54)
  49.     draw_actor_mp(actor,actor.index*128, 72)
  50.   end
  51. end
  52.     def update_cursor
  53.     if @index < 0
  54.       self.cursor_rect.empty
  55.     else
  56.       self.cursor_rect.set(@index * 128, 0, 128, 96)
  57.     end
  58.   end
  59. end
复制代码
第二个
  1. #==============================================================================
  2. # ■ Window_PartyCommand
  3. #------------------------------------------------------------------------------
  4. #  战斗画面、选择战斗与逃跑的窗口。
  5. #==============================================================================

  6. class Window_PartyCommand < Window_Command
  7.   #--------------------------------------------------------------------------
  8.   # ● 初始化对像
  9.   #--------------------------------------------------------------------------
  10.   def initialize
  11.     s1 = Vocab::fight
  12.     s2 = Vocab::escape
  13.     super(272, [s1, s2], 2, 1)
  14.     draw_item(0, true)
  15.     draw_item(1, $game_troop.can_escape)
  16.     self.active = false
  17.   end
  18. end

  19. #==============================================================================
  20. # ■ Window_ActorCommand
  21. #------------------------------------------------------------------------------
  22. #  选择角色命令(如「攻击」或「技能」)的窗口。
  23. #==============================================================================

  24. class Window_ActorCommand < Window_Command
  25.   #--------------------------------------------------------------------------
  26.   # ● 初始化对像
  27.   #--------------------------------------------------------------------------
  28.   def initialize
  29.     super(544, [], 4, 1)
  30.     self.active = false
  31.   end
  32.   #--------------------------------------------------------------------------
  33.   # ● 设置
  34.   #     actor : 角色
  35.   #--------------------------------------------------------------------------
  36.   def setup(actor)
  37.     s1 = Vocab::attack
  38.     s2 = Vocab::skill
  39.     s3 = Vocab::guard
  40.     s4 = Vocab::item
  41.     if actor.class.skill_name_valid     # 是否指定职业技能文字
  42.       s2 = actor.class.skill_name       # 替换「技能」命令文字
  43.     end
  44.     @commands = [s1, s2, s3, s4]
  45.     @item_max = 4
  46.     refresh
  47.     self.index = 0
  48.   end
  49. end

  50. #==============================================================================
  51. # ■ Scene_Battle
  52. #------------------------------------------------------------------------------
  53. #  处理战斗画面的类。
  54. #==============================================================================

  55. class Scene_Battle < Scene_Base
  56.   def update
  57.     super
  58.     update_basic(true)
  59.     update_info_viewport                  # 更新资讯显示端口
  60.     if $game_message.visible
  61.       @info_viewport.visible = false
  62.       @info_viewport.visible1 = false
  63.       @info_viewport.visible2 = false
  64.       @message_window.visible = true
  65.     end
  66.     unless $game_message.visible          # 除非讯息显示中
  67.       return if judge_win_loss            # 判断胜负结果
  68.       update_scene_change
  69.       if @target_enemy_window != nil
  70.         update_target_enemy_selection     # 选择目标敌人
  71.       elsif @target_actor_window != nil
  72.         update_target_actor_selection     # 选择目标角色
  73.       elsif @skill_window != nil
  74.         update_skill_selection            # 选择技能
  75.       elsif @item_window != nil
  76.         update_item_selection             # 选择物品
  77.       elsif @party_command_window.active
  78.         update_party_command_selection    # 选择队伍命令
  79.       elsif @actor_command_window.active
  80.         update_actor_command_selection    # 选择角色命令
  81.       else
  82.         process_battle_event              # 战斗事件处理
  83.         process_action                    # 战斗行动
  84.         process_battle_event              # 战斗事件处理
  85.       end
  86.     end
  87.   end
  88.   def create_info_viewport
  89.     @info_viewport = Viewport.new(0, 288, 544, 416)
  90.     @info_viewport1 = Viewport.new(0, 0, 544, 56)
  91.     @info_viewport2 = Viewport.new(0, 232, 544, 56)
  92.     @info_viewport.z = 100
  93.     @info_viewport1.z = 100
  94.     @info_viewport2.z = 100
  95.     @status_window = Window_BattleStatus.new
  96.     @party_command_window = Window_PartyCommand.new
  97.     @actor_command_window = Window_ActorCommand.new
  98.     @status_window.viewport = @info_viewport
  99.     @party_command_window.viewport = @info_viewport1
  100.     @actor_command_window.viewport = @info_viewport2
  101.     @info_viewport.visible = false
  102.     @info_viewport1.visible = false
  103.     @info_viewport2.visible = false
  104.   end
  105.   
  106.   def dispose_info_viewport
  107.     @status_window.dispose
  108.     @party_command_window.dispose
  109.     @actor_command_window.dispose
  110.     @info_viewport.dispose
  111.     @info_viewport1.dispose
  112.     @info_viewport2.dispose
  113.   end
  114.   
  115.   def update_info_viewport
  116.     @info_viewport1.visible = true if @party_command_window.active
  117.     @info_viewport1.visible = false if @actor_command_window.active
  118.     @info_viewport2.visible = true if @actor_command_window.active
  119.     @info_viewport2.visible = false if @party_command_window.active
  120.     @party_command_window.update
  121.     @actor_command_window.update
  122.     @status_window.update
  123.   end
  124.   
  125.   def start_party_command_selection
  126.     if $game_temp.in_battle
  127.       @status_window.refresh
  128.       @status_window.index = @actor_index = -1
  129.       @active_battler = nil
  130.       @info_viewport.visible = true
  131.       @info_viewport1.visible = true
  132.       @message_window.visible = false
  133.       @party_command_window.active = true
  134.       @party_command_window.index = 0
  135.       @actor_command_window.active = false
  136.       $game_party.clear_actions
  137.       if $game_troop.surprise or not $game_party.inputable?
  138.         start_main
  139.       end
  140.     end
  141.   end
  142.   #--------------------------------------------------------------------------
  143.   # ● 开始角色命令选择
  144.   #--------------------------------------------------------------------------
  145.   def start_actor_command_selection
  146.     @party_command_window.active = false
  147.     @actor_command_window.setup(@active_battler)
  148.     @actor_command_window.active = true
  149.     @actor_command_window.index = 0
  150.     @info_viewport2.visible = true
  151.   end
  152.   
  153.   def update_actor_command_selection
  154.     if Input.trigger?(Input::B)
  155.       Sound.play_cancel
  156.       prior_actor
  157.       @info_viewport2.visible = true
  158.     elsif Input.trigger?(Input::C)
  159.       case @actor_command_window.index
  160.       when 0  # 攻击
  161.         Sound.play_decision
  162.         @active_battler.action.set_attack
  163.         start_target_enemy_selection
  164.       when 1  # 技能
  165.         Sound.play_decision
  166.         start_skill_selection
  167.       when 2  # 防御
  168.         Sound.play_decision
  169.         @active_battler.action.set_guard
  170.         next_actor
  171.       when 3  # 物品
  172.         Sound.play_decision
  173.         start_item_selection
  174.       end
  175.       @info_viewport2.visible = false
  176.     end
  177.   end
  178. end
复制代码
脚本写法粗鲁请勿见怪……



这个灵感是来自6R的游戏,因为大多都是用默认的战斗状态……囧

也顺便送给新人参考


让我们一起讨论下还有怎样的排列法吧!




PS:如果觉得好的话,请给我经验啊
作者: 九夜神尊    时间: 2010-10-18 07:47
四个人快挤死了!
作者: Rion幻音    时间: 2010-10-18 09:42
所以才要想出新的排法
作者: oikl1268    时间: 2010-10-18 09:43
提示: 作者被禁止或删除 内容自动屏蔽
作者: Rion幻音    时间: 2010-10-18 11:33
本帖最后由 Rion幻音 于 2010-10-27 14:42 编辑

最新效果

说明

白色:角色名称
青色:体力数值与体力槽
蓝色:精力数值与精力槽
黄色:角色脸图
粉色:状态(像走马灯的功效)
紫色:怒气槽(极限时会更换颜色)
灰色:行动槽(不必我讲了吧 ~)

注:上图为640*480版本

话不多说
范例 Rion 战斗视窗.rar (288.4 KB, 下载次数: 690)
作者: 莹的赎生    时间: 2010-10-18 12:12
四个人的血条成为了一条线.,..不知道有没有方法改进
作者: 冰舞蝶恋    时间: 2010-10-18 12:40
嗯……要是能自动居中就好了(比方说一个、两个或三个人的时候)并且希望每个人都新开一个窗口……幻音你可一定要实现我的愿望啊~~~~拜托了~~表示愿意给3个VIP
作者: Rion幻音    时间: 2010-10-18 13:22
本帖最后由 Rion幻音 于 2010-10-18 13:42 编辑

看见酬劳表示……


!!!拼了!!! (燃烧起来了啊!!!)


用图案行吗?
像这样



注:本人脚本属于初学,失败的话抱歉啦~
作者: 莹的赎生    时间: 2010-10-18 17:11
哇,这次就比上次好多了呀...看来加分是动力~~~
作者: 冰舞蝶恋    时间: 2010-10-19 13:15
可不是嘛~~
作者: showpei    时间: 2010-10-27 09:54
樓主更新的東西好棒!

作者: jinzii    时间: 2010-10-27 12:59
提示: 作者被禁止或删除 内容自动屏蔽
作者: Rion幻音    时间: 2010-10-27 14:43
5楼,范例已发出……
作者: showpei    时间: 2010-10-27 17:05
本帖最后由 showpei 于 2010-10-28 16:44 编辑

非常兴奋地使用了楼主的脚本,但在跟ATB 搭配使用时会出错。
正常战斗使用时,状态会在脸图三分之一左右的地方跑。
不知道是不是我使用上有错误呢?

另外对楼主的贡献感到钦佩!
对640*480的版本表示兴趣!

放在ATB腳本後...錯誤如下

作者: supercyclone    时间: 2011-3-20 20:13
楼主厉害




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1