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

Project1

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

[已经过期] 状态的详细说明

[复制链接]

Lv3.寻梦者

梦石
0
星屑
2510
在线时间
437 小时
注册时间
2016-10-1
帖子
42
跳转到指定楼层
1
发表于 2020-4-5 02:53:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
大家好,我将状态视窗的显示装备删除了,并在同样的地方换成如以下可选择的状态框,我的设定是如果再按ENTER可以更进一步查看状态的详细说明(如"燃烧":此状态下将每回合掉血10%)
$game_temp.message_text = $状态介绍[@details_state_window.active_state_id]
但是不管怎么按都没有反应(有音效)
劳烦各位帮忙,以下我的腳本 修改的部分在于Scene_Status以及状态详细说明自改里面
该怎么样让它跳出状态的详细说明呢?
  1. $状态介绍 = {}
  2.   $状态介绍[3]="此狀態下力量提高至125%。"
  3. $状态介绍[52]="小夫持有的特殊狀態,會使自身攻擊力提升至150%。"

  4. #==============================================================================
  5. # ■ Scene_Status
  6. #------------------------------------------------------------------------------
  7. #  处理状态画面的类。
  8. #==============================================================================

  9. class Scene_Status
  10.   
  11.   #--------------------------------------------------------------------------
  12.   # ● 初始化对像
  13.   #     actor_index : 角色索引
  14.   #--------------------------------------------------------------------------
  15.   def initialize(actor_index = 0, equip_index = 0)
  16.     @actor_index = actor_index
  17.    
  18.    
  19.    
  20.   
  21.   end
  22.   #--------------------------------------------------------------------------
  23.   # ● 主处理
  24.   #--------------------------------------------------------------------------
  25.   def main
  26.     # 获取角色
  27.     @actor = $game_party.actors[@actor_index]
  28.     # 生成状态窗口
  29.     @status_window = Window_Status.new(@actor)
  30.   @details_state_window = Window_State_Details.new(@actor)
  31.   @details_state_window.index=0
  32.     # 执行过渡
  33.     Graphics.transition
  34.     # 主循环
  35.     loop do
  36.       # 刷新游戏画面
  37.       Graphics.update
  38.       # 刷新输入信息
  39.       Input.update
  40.       # 刷新画面
  41.       update
  42.       # 如果画面被切换的话就中断循环
  43.       if $scene != self
  44.         break
  45.       end
  46.     end
  47.     # 准备过渡
  48.     Graphics.freeze
  49.     # 释放窗口
  50.     @status_window.dispose
  51.     @details_state_window.dispose
  52.    
  53.    
  54.   end
  55.   #--------------------------------------------------------------------------
  56.   # ● 刷新画面
  57.   #--------------------------------------------------------------------------
  58.   def update
  59.     @details_state_window.update
  60.     # 按下 B 键的情况下
  61.     if Input.trigger?(Input::B)
  62.       # 演奏取消 SE
  63.       $game_system.se_play($data_system.cancel_se)
  64.       # 切换到菜单画面
  65.       $scene = Scene_Menu.new(3)
  66.       return
  67.     end
  68.     # 按下 R 键的情况下
  69.     if Input.trigger?(Input::R)
  70.       # 演奏光标 SE
  71.       $game_system.se_play($data_system.cursor_se)
  72.       # 移至下一位角色
  73.       @actor_index += 1
  74.       @actor_index %= $game_party.actors.size
  75.       # 切换到别的状态画面
  76.       $scene = Scene_Status.new(@actor_index)
  77.       return
  78.     end
  79.     # 按下 L 键的情况下
  80.     if Input.trigger?(Input::L)
  81.       # 演奏光标 SE
  82.       $game_system.se_play($data_system.cursor_se)
  83.       # 移至上一位角色
  84.       @actor_index += $game_party.actors.size - 1
  85.       @actor_index %= $game_party.actors.size
  86.       # 切换到别的状态画面
  87.       $scene = Scene_Status.new(@actor_index)
  88.       return
  89.     end
  90.    
  91.     if Input.trigger?(Input::C)
  92.       @details_state_window.active=true
  93.          # 演奏取消 SE
  94.       $game_system.se_play($data_system.cancel_se)
  95.       
  96.       
  97. =begin
  98.       unless @details_state_window.active_state_id == nil or $状态介绍[@details_state_window.active_state_id].nil?
  99.            chat([300,460],"nil",["Blue",true],true)
  100.             text = ""
  101.             text +=$状态介绍[@details_state_window.active_state_id]
  102.       s=(text).scan(/./)
  103.       unless s.empty?
  104.         #一行显示32个字
  105.         n = 0
  106.         for i in s
  107.           if i.length == 1
  108.           n += 1.5
  109.           else
  110.           n += i.length
  111.           end
  112.           if n > 89
  113.           n = 0
  114.           statetext += "\n"
  115.           end
  116. #          statetext += i.to_s
  117.         end  
  118.       end

  119. end
  120. =end
  121.       #$game_temp.message_text = statetext
  122. $game_temp.message_text = $状态介绍[@details_state_window.active_state_id]
  123. # $状态介绍[@details_state_window.active_state_id]
  124.      return
  125.      end
  126.   end
  127.   end

复制代码

  1. #==============================================================================
  2. # ■ Window_State_Details
  3. #------------------------------------------------------------------------------
  4. #  状态画面、显示状态名称的窗口。
  5. #==============================================================================
  6. class Window_State_Details < Window_Selectable
  7.   def initialize(actor,show_hidden = false)
  8.     super(320, 280, 280, 190)
  9.     @actor = actor
  10.     @column_max = 1
  11.     @row_spacing = 28
  12.     @show_hidden = show_hidden
  13.     @active=true
  14.     refresh
  15.     self.index = -1
  16.     self.back_opacity = 192

  17.   end
  18. #--------------------------------------------------------------------------
  19. # ● 刷新
  20. #--------------------------------------------------------------------------
  21.   def refresh
  22.     if self.contents != nil
  23.       self.contents.dispose
  24.       self.contents = nil
  25.     end
  26.     @data = []
  27.    
  28.     for state in @actor.states
  29.       if !ICON_STATE_IDS.include?(state)
  30.         next
  31.       end  
  32.     @data.push(state)
  33.   end
  34.   #生成空白
  35.   @data.push(nil)
  36.   # 生成位图、描绘全部项目
  37.     @item_max = @data.size
  38.     self.contents = Bitmap.new(width - @row_spacing, row_max * @row_spacing)
  39.     if @data.size > 1
  40.       for i in 0...@item_max-1
  41.         draw_item(i)
  42.       end
  43.     else
  44.        self.contents.draw_text(4 + 28, 0, width - @row_spacing, @row_spacing, "<当前没有附加状态>", 0)
  45.     end
  46.   end

  47.   def active_state_id
  48.     return @data[self.index]
  49.   end
  50.   
  51.   
  52.   
  53.   
  54.   #--------------------------------------------------------------------------
  55.   # ● 项目的描绘
  56.   #     index : 项目符号
  57.   #--------------------------------------------------------------------------
  58.   def draw_item(index)
  59.     state = @data[index]
  60.     x = 4
  61.     y = index * @row_spacing
  62.   bitmap = RPG::Cache.icon($data_states[state].name.to_s + ".png")
  63. # if actor.states_turn[state] >= $data_states[state].hold_turn/2.0 or actor.states_turn[state]<0
  64. #     opacity = 255
  65. #   else
  66.   #    opacity = 100
  67. # end
  68. # 这里的图标大小默认是24x24,要改就改下面那个Rect.new(0, 0, 24, 24)
  69.      self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
  70.      self.contents.font.size = 16
  71.      self.contents.draw_text(x + 28, y, 212, @row_spacing, $data_states[state].name, 0)
  72.      self.contents.draw_text(x + 120, y, 16, @row_spacing, ":", 1)
  73.     unless @actor.states_turn[state].nil?
  74.        if @actor.states_turn[state] >= 0
  75.         if @actor.states_turn[state] == 0 and $data_states[state].auto_release_prob == 0
  76.           if state == 242 or state == 243
  77.            state_turn = "视心情而定"
  78.           else
  79.             state_turn = "永久"
  80.           end  
  81.         else  
  82.          remain_turn = @actor.states_turn[state]
  83.          unless remain_turn.integer?
  84.            remain_turn = ((remain_turn*100).round)/100.0
  85.          end
  86.          state_turn = remain_turn.to_s+$data_states[state].unit#"回合"
  87.         end #永久
  88.        else
  89.          case @actor.states_turn[state]
  90.          when -1
  91.            state_turn = "永久"
  92.          when -2
  93.            state_turn = "固有"
  94.          when -3
  95.            state_turn = "潜能"
  96.         #######
  97.          when -4
  98.            state_turn = "援护"
  99.          else
  100.            state_turn = "永久"
  101.           end
  102.         end
  103.      else
  104.         state_turn = "永久"
  105.      end
  106.      self.contents.draw_text(x + 136, y, 80, @row_spacing,state_turn, 1)
  107.   end
  108. end
复制代码

Lv5.捕梦者

梦石
0
星屑
39021
在线时间
5719 小时
注册时间
2006-11-10
帖子
6619
2
发表于 2020-4-5 11:53:35 | 只看该作者
从一开始你的思路就是错的, 你打算调用对话框来显示额外信息, 然而对话框(窗口),事件解释器,都只有在scene map才有效, 你在 scene state 里调用它自然无效了,  就像你跑肯德基点一碗牛肉面, 你看看人家理不理你

正确方法, 新建一个窗口去显示它,
栗子
把$game_temp.message_text = $状态介绍[@details_state_window.active_state_id] 替换为
@a = Window_Base.new(0,0,640,480)
@a.contents = Bitmap.new(608, 448)
@a.contents.draw_text(0,0,608,448,$状态介绍[@details_state_window.active_state_id] )
@a.z = 10086

要它消失就  @a.dispose

然后自己去折腾吧

点评

既然你们只是贪Window message的身子, 那自己建一个窗口不是更自由嘛=.=  发表于 2020-4-5 12:52
原来这样可以,受教了(自己花了大半天)  发表于 2020-4-5 12:01
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2234
在线时间
90 小时
注册时间
2018-6-29
帖子
19

R考场第七期纪念奖

3
发表于 2020-4-5 11:55:33 | 只看该作者
已经做过测试了,至少能显示文字了,如果不考虑美观的话。改过的地方已用#宝箱君注释了。
另外,这脚本也只是供参考用
(之所以会改,是因为自已也用这个脚本,而且已经改正到2.0版了,只是迟迟不发而已2333)
RUBY 代码复制
  1. #宝箱君
  2. #ICON_STATE_IDS = 1..4
  3. #宝箱君
  4. #======================
  5. $状态介绍 = {}
  6. $状态介绍[2]="此狀態下力量提高至125%。"
  7. $状态介绍[4]="小夫持有的特殊狀態,會使自身攻擊力
  8. 會使自身攻擊力
  9. 會使自身攻擊力
  10. 會使自身攻擊力
  11. 會使自身攻擊力提升至150%。"
  12. #这是换行,另外,无法显示超过4行的介绍,你就当是在用显示文章这个功能吧………
  13.  
  14. #==============================================================================
  15. # ■ Scene_Status
  16. #------------------------------------------------------------------------------
  17. #  处理状态画面的类。
  18. #==============================================================================
  19.  
  20. class Scene_Status
  21.  
  22.   #--------------------------------------------------------------------------
  23.   # ● 初始化对像
  24.   #     actor_index : 角色索引
  25.   #--------------------------------------------------------------------------
  26.   def initialize(actor_index = 0, equip_index = 0)
  27.     @actor_index = actor_index
  28.   end
  29.   #--------------------------------------------------------------------------
  30.   # ● 主处理
  31.   #--------------------------------------------------------------------------
  32.   def main
  33.     # 获取角色
  34.     @actor = $game_party.actors[@actor_index]
  35.     # 生成状态窗口
  36.     @status_window = Window_Status.new(@actor)
  37.   @details_state_window = Window_State_Details.new(@actor)
  38.   @details_state_window.index=0
  39.   #宝箱君
  40.   @message_window = Window_Message.new #信息窗口
  41.   #宝箱君
  42.     # 执行过渡
  43.     Graphics.transition
  44.     # 主循环
  45.     loop do
  46.       # 刷新游戏画面
  47.       Graphics.update
  48.       # 刷新输入信息
  49.       Input.update
  50.       # 刷新画面
  51.       update
  52.       # 如果画面被切换的话就中断循环
  53.       if $scene != self
  54.         break
  55.       end
  56.     end
  57.     # 准备过渡
  58.     Graphics.freeze
  59.     # 释放窗口
  60.     @status_window.dispose
  61.     @details_state_window.dispose
  62.     #宝箱君
  63.     @message_window.dispose
  64.     #宝箱君
  65.  
  66.   end
  67.   #--------------------------------------------------------------------------
  68.   # ● 刷新画面
  69.   #--------------------------------------------------------------------------
  70.   def update
  71.     @details_state_window.update
  72.     #宝箱怪
  73.     @message_window.update
  74.     #宝箱怪
  75.     # 按下 B 键的情况下
  76.     if Input.trigger?(Input::B)
  77.       # 演奏取消 SE
  78.       $game_system.se_play($data_system.cancel_se)
  79.       # 切换到菜单画面
  80.       @message_window.active = true
  81.       $scene = Scene_Menu.new(3)
  82.       return
  83.     end
  84.     # 按下 R 键的情况下
  85.     if Input.trigger?(Input::R)
  86.       # 演奏光标 SE
  87.       $game_system.se_play($data_system.cursor_se)
  88.       # 移至下一位角色
  89.       @actor_index += 1
  90.       @actor_index %= $game_party.actors.size
  91.       # 切换到别的状态画面
  92.       $scene = Scene_Status.new(@actor_index)
  93.       return
  94.     end
  95.     # 按下 L 键的情况下
  96.     if Input.trigger?(Input::L)
  97.       # 演奏光标 SE
  98.       $game_system.se_play($data_system.cursor_se)
  99.       # 移至上一位角色
  100.       @actor_index += $game_party.actors.size - 1
  101.       @actor_index %= $game_party.actors.size
  102.       # 切换到别的状态画面
  103.       $scene = Scene_Status.new(@actor_index)
  104.       return
  105.     end
  106.  
  107.     if Input.trigger?(Input::C)
  108.       @details_state_window.active=true
  109.          # 演奏取消 SE
  110.       $game_system.se_play($data_system.cancel_se)
  111. #宝箱怪
  112.       text = ""
  113.       text += $状态介绍[@details_state_window.active_state_id]
  114.       $game_temp.message_text = text
  115. #宝箱怪
  116. return
  117. end
  118.   end
  119. end

评分

参与人数 1星屑 +20 收起 理由
RyanBern + 20 塞糖

查看全部评分

回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2510
在线时间
437 小时
注册时间
2016-10-1
帖子
42
4
 楼主| 发表于 2020-4-5 17:44:04 | 只看该作者
1103123301 发表于 2020-4-5 11:55
已经做过测试了,至少能显示文字了,如果不考虑美观的话。改过的地方已用#宝箱君注释了。
另外,这脚本也只 ...


太感谢你了 很实用 但是没办法实现自动换行吗? 目前思路是这样 ,我有把message的窗口扩大,但是下面脚本插入后,第一行的文字由时会被切掉或是在第二行重复出现

  1. s=(text).scan(/./)
  2. unless s.empty?
  3.         #一行显示32个字
  4.         n = 0
  5.         for i in s
  6.           if i.length == 1
  7.            n += 1.5
  8.            else
  9.           n += i.length
  10.          end
  11.           if n > 89
  12.           n = 0
  13.           text += "\n"
  14.           end
  15.           text += i.to_s
  16.         end  
  17.       end
复制代码
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2510
在线时间
437 小时
注册时间
2016-10-1
帖子
42
5
 楼主| 发表于 2020-4-5 17:46:14 | 只看该作者
灯笼菜刀王 发表于 2020-4-5 11:53
从一开始你的思路就是错的, 你打算调用对话框来显示额外信息, 然而对话框(窗口),事件解释器,都只 ...

感谢你的方法,但我使用message窗口,想实现文字自动换行,目前的思路是这样,我有把message的窗口扩大,但是下面脚本插入后,第一行的文字由时会被切掉或是再第二行重复出现
  1.      s=(text).scan(/./)

  2.       unless s.empty?
  3.         #一行显示32个字
  4.         n = 0
  5.         for i in s
  6.           if i.length == 1
  7.            n += 1.5
  8.            else
  9.           n += i.length
  10.          end
  11.           if n > 80
  12.           n = 0
  13.           text += "\n"
  14.           end
  15.           text += i.to_s
  16.         end  
  17.       end
复制代码
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-26 14:02

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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