Project1

标题: Window_Help中的几个小问题~ [打印本页]

作者: 紫英晓狼1130    时间: 2013-7-13 06:39
标题: Window_Help中的几个小问题~
悬赏 60经验

我想把特技说明,敌人名字状态,招式名分成三个窗口来描绘
特技说明的框向下移至我方状态之上,效果如下

我这个是可以修改的,但是一修改,所有的窗口全改了...

敌人名字状态修改成左上角显示,效果如下

我这个也是可以修改的,但是一修改,还是所有的窗口全改了...

招式名变成居中显示,效果如下


谢谢大家了~
作者: wwwcctvty    时间: 2013-7-13 07:38
我知道的是有二种方法,一种是每种类型可以传递一个参数给WINODW HELP,还有一种就是写多个WINODW HELP窗口
作者: 你最珍贵    时间: 2013-7-13 08:46
如果你自己会改的话。。  可以在help上面改……
  1.     # 战斗中的情况下将窗口移至中央并将其半透明化
  2.     if $game_temp.in_battle
复制代码

作者: 我爱吴悦淇    时间: 2013-7-13 10:26
插入Main之上哦,
  1. #==============================================================================
  2. # ■ Window_Skill
  3. #------------------------------------------------------------------------------
  4. #  特技画面、战斗画面、显示可以使用的特技浏览的窗口。
  5. #==============================================================================
  6. #==============================================================================
  7. # ■ Window_Item
  8. #------------------------------------------------------------------------------
  9. #  物品画面、战斗画面、显示浏览物品的窗口。
  10. #==============================================================================

  11. class Window_Item < Window_Selectable
  12.   #--------------------------------------------------------------------------
  13.   # ● 初始化对像
  14.   #--------------------------------------------------------------------------
  15.   def initialize
  16.     super(0, 64, 640, 416)
  17.     @column_max = 2
  18.     refresh
  19.     self.index = 0
  20.     # 战斗中的情况下将窗口移至中央并将其半透明化
  21.     if $game_temp.in_battle
  22.       self.y = 0
  23.       self.height = 256
  24.       self.back_opacity = 160
  25.     end
  26.   end
  27.   #--------------------------------------------------------------------------
  28.   # ● 获取物品
  29.   #--------------------------------------------------------------------------
  30.   def item
  31.     return @data[self.index]
  32.   end
  33.   #--------------------------------------------------------------------------
  34.   # ● 刷新
  35.   #--------------------------------------------------------------------------
  36.   def refresh
  37.     if self.contents != nil
  38.       self.contents.dispose
  39.       self.contents = nil
  40.     end
  41.     @data = []
  42.     # 添加物品
  43.     for i in 1...$data_items.size
  44.       if $game_party.item_number(i) > 0
  45.         @data.push($data_items[i])
  46.       end
  47.     end
  48.     # 在战斗中以外添加武器、防具
  49.     unless $game_temp.in_battle
  50.       for i in 1...$data_weapons.size
  51.         if $game_party.weapon_number(i) > 0
  52.           @data.push($data_weapons[i])
  53.         end
  54.       end
  55.       for i in 1...$data_armors.size
  56.         if $game_party.armor_number(i) > 0
  57.           @data.push($data_armors[i])
  58.         end
  59.       end
  60.     end
  61.     # 如果项目数不是 0 就生成位图、重新描绘全部项目
  62.     @item_max = @data.size
  63.     if @item_max > 0
  64.       self.contents = Bitmap.new(width - 32, row_max * 32)
  65.       for i in 0...@item_max
  66.         draw_item(i)
  67.       end
  68.     end
  69.   end
  70.   #--------------------------------------------------------------------------
  71.   # ● 描绘项目
  72.   #     index : 项目编号
  73.   #--------------------------------------------------------------------------
  74.   def draw_item(index)
  75.     item = @data[index]
  76.     case item
  77.     when RPG::Item
  78.       number = $game_party.item_number(item.id)
  79.     when RPG::Weapon
  80.       number = $game_party.weapon_number(item.id)
  81.     when RPG::Armor
  82.       number = $game_party.armor_number(item.id)
  83.     end
  84.     if item.is_a?(RPG::Item) and
  85.        $game_party.item_can_use?(item.id)
  86.       self.contents.font.color = normal_color
  87.     else
  88.       self.contents.font.color = disabled_color
  89.     end
  90.     x = 4 + index % 2 * (288 + 32)
  91.     y = index / 2 * 32
  92.     rect = Rect.new(x, y, self.width / @column_max - 32, 32)
  93.     self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
  94.     bitmap = RPG::Cache.icon(item.icon_name)
  95.     opacity = self.contents.font.color == normal_color ? 255 : 128
  96.     self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
  97.     self.contents.draw_text(x + 28, y, 212, 32, item.name, 0)
  98.     self.contents.draw_text(x + 240, y, 16, 32, ":", 1)
  99.     self.contents.draw_text(x + 256, y, 24, 32, number.to_s, 2)
  100.   end
  101.   #--------------------------------------------------------------------------
  102.   # ● 刷新帮助文本
  103.   #--------------------------------------------------------------------------
  104.   def update_help
  105.     @help_window.set_text(self.item == nil ? "" : self.item.description)
  106.   end
  107. end

  108. class Window_Skill < Window_Selectable
  109.   #--------------------------------------------------------------------------
  110.   # ● 初始化对像
  111.   #     actor : 角色
  112.   #--------------------------------------------------------------------------
  113.   def initialize(actor)
  114.     super(0, 128, 640, 352)
  115.     [url=home.php?mod=space&uid=95897]@actor[/url] = actor
  116.     @column_max = 2
  117.     refresh
  118.     self.index = 0
  119.     # 战斗中的情况下将窗口移至中央并将其半透明化
  120.     if $game_temp.in_battle
  121.       self.y = 0
  122.       self.height = 256
  123.       self.back_opacity = 160
  124.     end
  125.   end
  126.   #--------------------------------------------------------------------------
  127.   # ● 获取特技
  128.   #--------------------------------------------------------------------------
  129.   def skill
  130.     return @data[self.index]
  131.   end
  132.   #--------------------------------------------------------------------------
  133.   # ● 刷新
  134.   #--------------------------------------------------------------------------
  135.   def refresh
  136.     if self.contents != nil
  137.       self.contents.dispose
  138.       self.contents = nil
  139.     end
  140.     @data = []
  141.     for i in [email protected]
  142.       skill = $data_skills[@actor.skills[i]]
  143.       if skill != nil
  144.         @data.push(skill)
  145.       end
  146.     end
  147.     # 如果项目数不是 0 就生成位图、重新描绘全部项目
  148.     @item_max = @data.size
  149.     if @item_max > 0
  150.       self.contents = Bitmap.new(width - 32, row_max * 32)
  151.       for i in 0...@item_max
  152.         draw_item(i)
  153.       end
  154.     end
  155.   end
  156.   #--------------------------------------------------------------------------
  157.   # ● 描绘项目
  158.   #     index : 项目编号
  159.   #--------------------------------------------------------------------------
  160.   def draw_item(index)
  161.     skill = @data[index]
  162.     if @actor.skill_can_use?(skill.id)
  163.       self.contents.font.color = normal_color
  164.     else
  165.       self.contents.font.color = disabled_color
  166.     end
  167.     x = 4 + index % 2 * (288 + 32)
  168.     y = index / 2 * 32
  169.     rect = Rect.new(x, y, self.width / @column_max - 32, 32)
  170.     self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
  171.     bitmap = RPG::Cache.icon(skill.icon_name)
  172.     opacity = self.contents.font.color == normal_color ? 255 : 128
  173.     self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
  174.     self.contents.draw_text(x + 28, y, 204, 32, skill.name, 0)
  175.     self.contents.draw_text(x + 232, y, 48, 32, skill.sp_cost.to_s, 2)
  176.   end
  177.   #--------------------------------------------------------------------------
  178.   # ● 刷新帮助文本
  179.   #--------------------------------------------------------------------------
  180.   def update_help
  181.     @help_window.set_text(self.skill == nil ? "" : self.skill.description)
  182.   end
  183. end
  184. #==============================================================================
  185. # ■ Scene_Battle (分割定义 1)
  186. #------------------------------------------------------------------------------
  187. #  处理战斗画面的类。
  188. #==============================================================================

  189. class Scene_Battle
  190.   #--------------------------------------------------------------------------
  191.   # ● 主处理
  192.   #--------------------------------------------------------------------------
  193.   def main
  194.     # 初始化战斗用的各种暂时数据
  195.     $game_temp.in_battle = true
  196.     $game_temp.battle_turn = 0
  197.     $game_temp.battle_event_flags.clear
  198.     $game_temp.battle_abort = false
  199.     $game_temp.battle_main_phase = false
  200.     $game_temp.battleback_name = $game_map.battleback_name
  201.     $game_temp.forcing_battler = nil
  202.     # 初始化战斗用事件解释器
  203.     $game_system.battle_interpreter.setup(nil, 0)
  204.     # 准备队伍
  205.     @troop_id = $game_temp.battle_troop_id
  206.     $game_troop.setup(@troop_id)
  207.     # 生成角色命令窗口
  208.     s1 = $data_system.words.attack
  209.     s2 = $data_system.words.skill
  210.     s3 = $data_system.words.guard
  211.     s4 = $data_system.words.item
  212.     @actor_command_window = Window_Command.new(160, [s1, s2, s3, s4])
  213.     @actor_command_window.y = 160
  214.     @actor_command_window.back_opacity = 160
  215.     @actor_command_window.active = false
  216.     @actor_command_window.visible = false
  217.     # 生成其它窗口
  218.     @party_command_window = Window_PartyCommand.new
  219.     @help_window = Window_Help.new
  220.     @help_window.back_opacity = 160
  221.     @help_window.y = 256
  222.     @help_window.visible = false
  223.     @status_window = Window_BattleStatus.new
  224.     @message_window = Window_Message.new
  225.     # 生成活动块
  226.     @spriteset = Spriteset_Battle.new
  227.     # 初始化等待计数
  228.     @wait_count = 0
  229.     # 执行过渡
  230.     if $data_system.battle_transition == ""
  231.       Graphics.transition(20)
  232.     else
  233.       Graphics.transition(40, "Graphics/Transitions/" +
  234.         $data_system.battle_transition)
  235.     end
  236.     # 开始自由战斗回合
  237.     start_phase1
  238.     # 主循环
  239.     loop do
  240.       # 刷新游戏画面
  241.       Graphics.update
  242.       # 刷新输入信息
  243.       Input.update
  244.       # 刷新画面
  245.       update
  246.       # 如果画面切换的话就中断循环
  247.       if $scene != self
  248.         break
  249.       end
  250.     end
  251.     # 刷新地图
  252.     $game_map.refresh
  253.     # 准备过渡
  254.     Graphics.freeze
  255.     # 释放窗口
  256.     @actor_command_window.dispose
  257.     @party_command_window.dispose
  258.     @help_window.dispose
  259.     @status_window.dispose
  260.     @message_window.dispose
  261.     if @skill_window != nil
  262.       @skill_window.dispose
  263.     end
  264.     if @item_window != nil
  265.       @item_window.dispose
  266.     end
  267.     if @result_window != nil
  268.       @result_window.dispose
  269.     end
  270.     # 释放活动块
  271.     @spriteset.dispose
  272.     # 标题画面切换中的情况
  273.     if $scene.is_a?(Scene_Title)
  274.       # 淡入淡出画面
  275.       Graphics.transition
  276.       Graphics.freeze
  277.     end
  278.     # 战斗测试或者游戏结束以外的画面切换中的情况
  279.     if $BTEST and not $scene.is_a?(Scene_Gameover)
  280.       $scene = nil
  281.     end
  282.   end
  283.   #--------------------------------------------------------------------------
  284.   # ● 胜负判定
  285.   #--------------------------------------------------------------------------
  286.   def judge
  287.     # 全灭判定是真、并且同伴人数为 0 的情况下
  288.     if $game_party.all_dead? or $game_party.actors.size == 0
  289.       # 允许失败的情况下
  290.       if $game_temp.battle_can_lose
  291.         # 还原为战斗开始前的 BGM
  292.         $game_system.bgm_play($game_temp.map_bgm)
  293.         # 战斗结束
  294.         battle_end(2)
  295.         # 返回 true
  296.         return true
  297.       end
  298.       # 设置游戏结束标志
  299.       $game_temp.gameover = true
  300.       # 返回 true
  301.       return true
  302.     end
  303.     # 如果存在任意 1 个敌人就返回 false
  304.     for enemy in $game_troop.enemies
  305.       if enemy.exist?
  306.         return false
  307.       end
  308.     end
  309.     # 开始结束战斗回合 (胜利)
  310.     start_phase5
  311.     # 返回 true
  312.     return true
  313.   end
  314.   #--------------------------------------------------------------------------
  315.   # ● 战斗结束
  316.   #     result : 結果 (0:胜利 1:失败 2:逃跑)
  317.   #--------------------------------------------------------------------------
  318.   def battle_end(result)
  319.     # 清除战斗中标志
  320.     $game_temp.in_battle = false
  321.     # 清除全体同伴的行动
  322.     $game_party.clear_actions
  323.     # 解除战斗用状态
  324.     for actor in $game_party.actors
  325.       actor.remove_states_battle
  326.     end
  327.     # 清除敌人
  328.     $game_troop.enemies.clear
  329.     # 调用战斗返回
  330.     if $game_temp.battle_proc != nil
  331.       $game_temp.battle_proc.call(result)
  332.       $game_temp.battle_proc = nil
  333.     end
  334.     # 切换到地图画面
  335.     $scene = Scene_Map.new
  336.   end
  337.   #--------------------------------------------------------------------------
  338.   # ● 设置战斗事件
  339.   #--------------------------------------------------------------------------
  340.   def setup_battle_event
  341.     # 正在执行战斗事件的情况下
  342.     if $game_system.battle_interpreter.running?
  343.       return
  344.     end
  345.     # 搜索全部页的战斗事件
  346.     for index in 0...$data_troops[@troop_id].pages.size
  347.       # 获取事件页
  348.       page = $data_troops[@troop_id].pages[index]
  349.       # 事件条件可以参考 c
  350.       c = page.condition
  351.       # 没有指定任何条件的情况下转到下一页
  352.       unless c.turn_valid or c.enemy_valid or
  353.              c.actor_valid or c.switch_valid
  354.         next
  355.       end
  356.       # 执行完毕的情况下转到下一页
  357.       if $game_temp.battle_event_flags[index]
  358.         next
  359.       end
  360.       # 确认回合条件
  361.       if c.turn_valid
  362.         n = $game_temp.battle_turn
  363.         a = c.turn_a
  364.         b = c.turn_b
  365.         if (b == 0 and n != a) or
  366.            (b > 0 and (n < 1 or n < a or n % b != a % b))
  367.           next
  368.         end
  369.       end
  370.       # 确认敌人条件
  371.       if c.enemy_valid
  372.         enemy = $game_troop.enemies[c.enemy_index]
  373.         if enemy == nil or enemy.hp * 100.0 / enemy.maxhp > c.enemy_hp
  374.           next
  375.         end
  376.       end
  377.       # 确认角色条件
  378.       if c.actor_valid
  379.         actor = $game_actors[c.actor_id]
  380.         if actor == nil or actor.hp * 100.0 / actor.maxhp > c.actor_hp
  381.           next
  382.         end
  383.       end
  384.       # 确认开关条件
  385.       if c.switch_valid
  386.         if $game_switches[c.switch_id] == false
  387.           next
  388.         end
  389.       end
  390.       # 设置事件
  391.       $game_system.battle_interpreter.setup(page.list, 0)
  392.       # 本页的范围是 [战斗] 或 [回合] 的情况下
  393.       if page.span <= 1
  394.         # 设置执行结束标志
  395.         $game_temp.battle_event_flags[index] = true
  396.       end
  397.       return
  398.     end
  399.   end
  400.   #--------------------------------------------------------------------------
  401.   # ● 刷新画面
  402.   #--------------------------------------------------------------------------
  403.   def update
  404.     # 执行战斗事件中的情况下
  405.     if $game_system.battle_interpreter.running?
  406.       # 刷新解释器
  407.       $game_system.battle_interpreter.update
  408.       # 强制行动的战斗者不存在的情况下
  409.       if $game_temp.forcing_battler == nil
  410.         # 执行战斗事件结束的情况下
  411.         unless $game_system.battle_interpreter.running?
  412.           # 继续战斗的情况下、再执行战斗事件的设置
  413.           unless judge
  414.             setup_battle_event
  415.           end
  416.         end
  417.         # 如果不是结束战斗回合的情况下
  418.         if @phase != 5
  419.           # 刷新状态窗口
  420.           @status_window.refresh
  421.         end
  422.       end
  423.     end
  424.     # 系统 (计时器)、刷新画面
  425.     $game_system.update
  426.     $game_screen.update
  427.     # 计时器为 0 的情况下
  428.     if $game_system.timer_working and $game_system.timer == 0
  429.       # 中断战斗
  430.       $game_temp.battle_abort = true
  431.     end
  432.     # 刷新窗口
  433.     @help_window.update
  434.     @party_command_window.update
  435.     @actor_command_window.update
  436.     @status_window.update
  437.     @message_window.update
  438.     # 刷新活动块
  439.     @spriteset.update
  440.     # 处理过渡中的情况下
  441.     if $game_temp.transition_processing
  442.       # 清除处理过渡中标志
  443.       $game_temp.transition_processing = false
  444.       # 执行过渡
  445.       if $game_temp.transition_name == ""
  446.         Graphics.transition(20)
  447.       else
  448.         Graphics.transition(40, "Graphics/Transitions/" +
  449.           $game_temp.transition_name)
  450.       end
  451.     end
  452.     # 显示信息窗口中的情况下
  453.     if $game_temp.message_window_showing
  454.       return
  455.     end
  456.     # 显示效果中的情况下
  457.     if @spriteset.effect?
  458.       return
  459.     end
  460.     # 游戏结束的情况下
  461.     if $game_temp.gameover
  462.       # 切换到游戏结束画面
  463.       $scene = Scene_Gameover.new
  464.       return
  465.     end
  466.     # 返回标题画面的情况下
  467.     if $game_temp.to_title
  468.       # 切换到标题画面
  469.       $scene = Scene_Title.new
  470.       return
  471.     end
  472.     # 中断战斗的情况下
  473.     if $game_temp.battle_abort
  474.       # 还原为战斗前的 BGM
  475.       $game_system.bgm_play($game_temp.map_bgm)
  476.       # 战斗结束
  477.       battle_end(1)
  478.       return
  479.     end
  480.     # 等待中的情况下
  481.     if @wait_count > 0
  482.       # 减少等待计数
  483.       @wait_count -= 1
  484.       return
  485.     end
  486.     # 强制行动的角色存在、
  487.     # 并且战斗事件正在执行的情况下
  488.     if $game_temp.forcing_battler == nil and
  489.        $game_system.battle_interpreter.running?
  490.       return
  491.     end
  492.     # 回合分支
  493.     case @phase
  494.     when 1  # 自由战斗回合
  495.       update_phase1
  496.     when 2  # 同伴命令回合
  497.       update_phase2
  498.     when 3  # 角色命令回合
  499.       update_phase3
  500.     when 4  # 主回合
  501.       update_phase4
  502.     when 5  # 战斗结束回合
  503.       update_phase5
  504.     end
  505.   end
  506. end
复制代码

作者: 弗雷德    时间: 2013-7-13 11:37
特技的操作不应该是:选择特技-选择敌人-应用特技效果
默认的这个顺序在选择特技的时候尚未获取到敌人的信息,如何取得敌人的名字和状态?
将战斗步骤掉转的话又会使操作变得很别扭。
作者: wxdawmd    时间: 2013-7-13 12:44
这个是脚本的问题,因为编制游戏的工具会附带默认脚本,脚本默认是这样的,如果要改,就要修改脚本,但是一般来说修改脚本工程巨大,所以可以找符合相应要求的游戏,复制其脚本就可以了~
作者: 876加几    时间: 2013-7-13 16:06
改Scene_Battle,找到Window_Help的联系,修改Y值。
作者: 芯☆淡茹水    时间: 2013-7-14 13:47
本帖最后由 芯☆淡茹水 于 2013-7-14 13:54 编辑

是不是这个效果:
这是本人工程里的(PS:光标位置没调,指向位置不准,不要喷)



2,选择角色




3,技能名






上面的效果只用了一个 Window_Help 。
先把帮助窗口的高加大,描绘敌人属性的 X 坐标靠左,描绘角色属性的 X 坐标靠右,描绘技能名就居中。然后把帮助窗口的背景透明,
用背景图片 Sprite 来把显示的内容“括”起来。显示技能名的背景 Sprite 始终居中;当选择敌人时,显示角色和敌人属性的背景 Sprite
的 X 坐标就靠左,选择角色时就靠右。
至于背景图片的可见状态,和帮助窗口一样。

@弗雷德
我这个为LZ要求的美化升级版本。如果LZ提供素材,可代做。
作者: 芯☆淡茹水    时间: 2013-7-20 13:37
很久才上一次线,实在很抱歉
具体说起来很简单的,把 help_window 的高加大点(以方便竖着排版,例如LS),显示敌人属性调到左边,己方的调到右边,技能名居中,再透明背景
然后用自己制作图片当背景,在 Scene_Battle 里用 Sprite 显示,并且根据时机调试背景图片的位置即可。
作者: myownroc    时间: 2013-7-20 18:01
多建立几个Window_Help应该就可以了吧
只要你会改脚本




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