Project1

标题: (求助)ARPG中地图显示HP(SP.技能栏.物品栏)的关闭方法 [打印本页]

作者: minivivi    时间: 2010-10-8 18:09
标题: (求助)ARPG中地图显示HP(SP.技能栏.物品栏)的关闭方法
本帖最后由 minivivi 于 2010-10-15 16:20 编辑

主要是希望能够知道如何能在非战斗地图关闭HP等窗口的方法


如上图这样
HP跟SP条常驻在画面上
想做开头画面,也会因为HP条跟SP的显示
看起来怪怪的

在发问前,已经爬了不少文
也搜索了相关字汇

像是這篇脚本高手请入……讨厌的BUG

请问怎么让HP显示可以选择

所以知道应该是跟

def hud_properties
    if (CrissaegrimHud::OnOff_Hud_Switch == 0 or $game_switches[CrissaegrimHud::OnOff_Hud_Switch] == true)
      if @hud.visible == false
        @hud.update
        @hud.visible = true
        @bg.visible = true
      end
    elsif @hud.visible != false
       @hud.visible = false
       @bg.visible = false
     end
   end

这边有关
但是我在地图上试着设定事件
事件指令中的脚本内

我不管是输入
$game_switches[CrissaegrimHud::OnOff_Hud_Switch] == false
还是
$game_switches[0] == true

或是

OnOff_Hud_Switch = 1

都不起作用或是错误

看到有人提到是用变量操作
不知道详细的方法到底是如何?
希望各位高手能够帮我QQ
感激不尽

下面是我用的脚本
  1. #==============================================================================
  2. # Window Hud
  3. #这个脚本是经过yangff修改后的改良版,大量的增加了刷新效率,用这个体院原版hud基本何以满帧了
  4. #==============================================================================
  5. module CrissaegrimHud
  6.   
  7. # imagem de fundo da hud
  8. Background = "HUD_Background"
  9. # Switch que ativa / desativa a HUD
  10. # se for = 0, a Hud será mostrada na tela permanentemente
  11. OnOff_Hud_Switch = 0

  12. end
  13. #------------------------------------------------------------------------------
  14. class Window_CrissaegrimHud < Window_Base
  15.   def initialize
  16.     super(0,0,700,700)
  17.     self.opacity = 0
  18.     update
  19.   end
  20.   
  21.   def update
  22. return if Crissaegrim_ABS::Distance_Weapons == nil
  23.     if (@hp != $game_party.members[0].hp or @mp != $game_party.members[0].mp) or $refreshon==1#(tp1 != @tp1 or tp2 != @tp2)
  24.       #上一行是刷新条件
  25.       @hp = $game_party.members[0].hp
  26.       @mp = $game_party.members[0].mp
  27.       $refreshon = 0
  28.       self.contents.font.size = 16
  29.       self.contents.clear
  30.       skill_count = 0
  31.       for button in Crissaegrim_ABS::Skill_Button.keys
  32.         next if button == nil
  33.         skill = $data_skills[Crissaegrim_ABS::Skill_Button[button]]
  34.         next if skill == nil
  35.         show_icon(skill, (28 * skill_count) + 358, 316)
  36.         skill_count += 1
  37.       end
  38.       item_count = 0
  39.       for btn in Crissaegrim_ABS::Item_Button.keys
  40.         next if btn == nil
  41.         item = $data_items[Crissaegrim_ABS::Item_Button[btn]]
  42.         next if item == nil
  43.         show_icon(item, (28 * item_count) + 358, 356)
  44.         item_count += 1
  45.       end
  46.       actor = $game_party.members[0]
  47.       draw_actor_hp(actor, 0, -4, 96)
  48.       draw_actor_mp(actor, 0, 20, 96)
  49.       draw_actor_level(actor, 0, 44)
  50.       show_state(actor, 115, 0)
  51.       if Crissaegrim_ABS::Distance_Weapons.has_key?($game_party.members[0].weapon_id)
  52.         if Crissaegrim_ABS::Distance_Weapons[$game_party.members[0].weapon_id][5].to_i > 0
  53.           show_icon($data_items[Crissaegrim_ABS::Distance_Weapons[$game_party.members[0].weapon_id][5]], 260, 0)
  54.           self.contents.font.size = 18
  55.           self.contents.font.color = text_color(15)
  56.           self.contents.draw_text(260, 8, 24, 28, $game_party.item_number($data_items[Crissaegrim_ABS::Distance_Weapons[$game_party.members[0].weapon_id][5]]),1)
  57.           self.contents.font.size = 16
  58.           self.contents.font.color = text_color(0)
  59.           self.contents.draw_text(260, 8, 24, 28, $game_party.item_number($data_items[Crissaegrim_ABS::Distance_Weapons[$game_party.members[0].weapon_id][5]]),1)
  60.         end
  61.         if Crissaegrim_ABS::Distance_Weapons[$game_party.members[0].weapon_id][6].to_i > 0
  62.           show_icon($data_items[Crissaegrim_ABS::Distance_Weapons[$game_party.members[0].weapon_id][6]], 260, 40)
  63.           self.contents.font.size = 18
  64.           self.contents.font.color = text_color(15)
  65.           self.contents.draw_text(260, 48, 24, 28, $game_party.item_number($data_items[Crissaegrim_ABS::Distance_Weapons[$game_party.members[0].weapon_id][6]]),1)
  66.           self.contents.font.size = 16
  67.           self.contents.font.color = text_color(0)
  68.           self.contents.draw_text(260, 48, 24, 28, $game_party.item_number($data_items[Crissaegrim_ABS::Distance_Weapons[$game_party.members[0].weapon_id][6]]),1)
  69.         end
  70.       end
  71.     end
  72. end
  73.   def show_state(actor, x, y)
  74.     count = 0
  75.     for state in actor.states
  76.       draw_icon(state.icon_index, x, y + 24 * count)
  77.       count += 1
  78.       break if (24 * count > 76)
  79.     end
  80.   end
  81.   def show_icon(item, x, y)
  82.     if item != nil
  83.       draw_icon(item.icon_index, x, y)
  84.     end
  85.   end
  86. end

  87. class Scene_Map
  88.   alias hud_start start
  89.   alias hud_update update
  90.   alias hud_terminate terminate
  91.   def start
  92.     super
  93.     @bg = Sprite.new
  94.     @bg.bitmap = Cache.system(CrissaegrimHud::Background)
  95.     @bg.x = 200
  96.     @bg.y = 316
  97.     @hud = Window_CrissaegrimHud.new
  98.     @hud.x = 0
  99.     @hud.y = 0
  100.     hud_properties
  101.     hud_start
  102.   end
  103.   def update
  104.     super
  105.     #@bg.update
  106.     if @hud.visible != false
  107.       @hud.update
  108.     end
  109.     hud_properties
  110.     hud_update
  111.   end
  112.   #--------------------------------------------------------------------------
  113.   # ● 与状态窗口的开关相关的语句
  114.   #--------------------------------------------------------------------------   
  115.   def hud_properties
  116.     if (CrissaegrimHud::OnOff_Hud_Switch == 0 or $game_switches[CrissaegrimHud::OnOff_Hud_Switch] == true)
  117.       if @hud.visible == false
  118.         @hud.update
  119.         @hud.visible = true
  120.         @bg.visible = true
  121.       end
  122.     elsif @hud.visible != false
  123.        @hud.visible = false
  124.        @bg.visible = false
  125.      end
  126.    end
  127.   def terminate
  128.     super
  129.     @bg.dispose
  130.     @bg = nil
  131.     @hud.dispose
  132.     @hud = nil
  133.     hud_terminate
  134.   end
  135. end
复制代码

作者: 429259591    时间: 2010-10-8 18:11
我给个思路吧,我也不懂脚本,就是给这个脚本加上个开关,然后在你需要显示的地方打开,不需要的地方关闭
作者: minivivi    时间: 2010-10-8 22:40
很感谢LS的回答
不过...
貌似已经有开关设定了

应该就是下面这串
  1. def hud_properties
  2.     if (CrissaegrimHud::OnOff_Hud_Switch == 0 or $game_switches[CrissaegrimHud::OnOff_Hud_Switch] == true)
  3.       if @hud.visible == false
  4.         @hud.update
  5.         @hud.visible = true
  6.         @bg.visible = true
  7.       end
  8.     elsif @hud.visible != false
  9.        @hud.visible = false
  10.        @bg.visible = false
  11.      end
  12.    end
复制代码
我想知道怎么在事件中设定脚本
是下面红圈处那样 用脚本指令吗?
如果是的话,又该怎么写呢??
感谢

作者: Rion幻音    时间: 2010-10-9 09:17
用事件指令就行了
作者: minivivi    时间: 2010-10-15 16:20
终于摸索出来了
虽然观念很容易
不过事实上的操作要怎么做,总是没概念
今天突然想到应该是开关编号,预设是0
所以就把脚本开头的OnOff_Hud_Switch
设定成0以外的编号(我设定100)
并且简化下方的语法
  1. #  def hud_properties
  2. #     if (CrissaegrimHud::OnOff_Hud_Switch == 0 or $game_switches[CrissaegrimHud::OnOff_Hud_Switch] == true)
  3. #       if @hud.visible == false
  4. #         @hud.update
  5. #         @hud.visible = true
  6. #         @bg.visible = true
  7. #       end
  8. #     elsif @hud.visible != false
  9. #        @hud.visible = false
  10. #        @bg.visible = false
  11. #      end
  12. #    end
复制代码
if (CrissaegrimHud::OnOff_Hud_Switch == 0 or $game_switches[CrissaegrimHud::OnOff_Hud_Switch] == true)

简化成

if $game_switches[100] == true

然后在事件指令中,打开 开关操作
将编号100的开关给打开
为了避免搞混,顺便给开关取个名称:血条开关
要关闭的时候
再将开关给关闭就好了
就像附图红圈处那样


原来根本用不上事件指令中的脚本功能...
再次感谢各位的帮忙
终于解决了




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