Project1

标题: 更改暂停标记位置 [打印本页]

作者: dbshy    时间: 2008-8-27 00:38
标题: 更改暂停标记位置
看到提问区有人问,就写了一个

#   更改了显示文章中暂停标记的位置,此脚本暂停标记的的位置是
#   跟在对话后
#
#   如果你想要自己更改请搜索
#   @sprite_pause.x @sprite_pause.y
#   自己调坐标即可
#   WAIT_COUNT 为暂停标记动画的快慢



  1. #==============================================================
  2. #      更改暂停标记的位置  BY 水蓝
  3. #   更改了显示文章中暂停标记的位置,此脚本暂停标记的的位置是
  4. #   跟在对话后
  5. #
  6. #   如果你想要自己更改请搜索
  7. #   @sprite_pause.x @sprite_pause.y
  8. #   自己调坐标即可
  9. #   WAIT_COUNT 为暂停标记动画的快慢
  10. #==============================================================
  11. module PAUSE
  12.   
  13.   WAIT_COUNT = 3
  14.   
  15. end

  16. class Sprite_Pause < Sprite
  17.   
  18.   def initialize
  19.    
  20.     super
  21.     self.bitmap = RPG::Cache.windowskin($game_system.windowskin_name)
  22.     self.z = 9999
  23.    
  24.     @index = 0
  25.     @wait_count = 0
  26.     update
  27.    
  28.   end
  29.   

  30.   def update
  31.    
  32.     super
  33.     if @wait_count > 0 then
  34.       @wait_count -= 1
  35.     else
  36.       @index = (@index + 1) % 4
  37.       case @index
  38.        when 1
  39.          self.src_rect.set(160 , 64, 16, 16)
  40.        when 2
  41.          self.src_rect.set(160 + 16, 64, 16, 16)
  42.        when 3
  43.          self.src_rect.set(160 , 64 + 16, 16, 16)
  44.        when 4
  45.          self.src_rect.set(160 + 16, 64 + 16, 16, 16)
  46.       end
  47.       @wait_count = PAUSE::WAIT_COUNT
  48.     end
  49.    
  50.   end
  51.   
  52. end

  53. class Window_Message < Window_Selectable
  54.   #--------------------------------------------------------------------------
  55.   # ● 初始化状态
  56.   #--------------------------------------------------------------------------
  57.   def initialize
  58.     super(80, 304, 480, 160)
  59.     self.contents = Bitmap.new(width - 32, height - 32)
  60.     self.visible = false
  61.     self.z = 9998
  62.     @fade_in = false
  63.     @fade_out = false
  64.     @contents_showing = false
  65.     @cursor_width = 0
  66.     self.active = false
  67.     self.index = -1
  68.     @sprite_pause = Sprite_Pause.new
  69.     @sprite_pause.visible = false
  70.     $t = 0
  71.     $n = 0
  72.   end
  73.   #--------------------------------------------------------------------------
  74.   # ● 释放
  75.   #--------------------------------------------------------------------------
  76.   def dispose
  77.     terminate_message
  78.     @sprite_pause.dispose
  79.     $game_temp.message_window_showing = false
  80.     if @input_number_window != nil
  81.       @input_number_window.dispose
  82.     end
  83.     super
  84.   end
  85.   #--------------------------------------------------------------------------
  86.   # ● 处理信息结束
  87.   #--------------------------------------------------------------------------
  88.   def terminate_message
  89.     self.active = false
  90.     self.pause = false
  91.     self.index = -1
  92.     self.contents.clear
  93.     # 清除显示中标志
  94.     @contents_showing = false
  95.     # 呼叫信息调用
  96.     if $game_temp.message_proc != nil
  97.       $game_temp.message_proc.call
  98.     end
  99.     # 清除文章、选择项、输入数值的相关变量
  100.     $game_temp.message_text = nil
  101.     $game_temp.message_proc = nil
  102.     $game_temp.choice_start = 99
  103.     $game_temp.choice_max = 0
  104.     $game_temp.choice_cancel_type = 0
  105.     $game_temp.choice_proc = nil
  106.     $game_temp.num_input_start = 99
  107.     $game_temp.num_input_variable_id = 0
  108.     $game_temp.num_input_digits_max = 0
  109.     # 开放金钱窗口
  110.     if @gold_window != nil
  111.       @gold_window.dispose
  112.       @gold_window = nil
  113.     end
  114.     @sprite_pause.visible = false
  115.   end
  116.   #--------------------------------------------------------------------------
  117.   # ● 刷新
  118.   #--------------------------------------------------------------------------
  119.   def refresh
  120.     self.contents.clear
  121.     self.contents.font.color = normal_color
  122.     x = y = 0
  123.     @cursor_width = 0
  124.     # 到选择项的下一行字
  125.     if $game_temp.choice_start == 0
  126.       x = 8
  127.     end
  128.     # 有等待显示的文字的情况下
  129.     if $game_temp.message_text != nil
  130.       text = $game_temp.message_text
  131.       # 限制文字处理
  132.       begin
  133.         last_text = text.clone
  134.         text.gsub!(/\\[Vv]\[([0-9]+)\]/) { $game_variables[$1.to_i] }
  135.       end until text == last_text
  136.       text.gsub!(/\\[Nn]\[([0-9]+)\]/) do
  137.         $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""
  138.       end
  139.       # 为了方便、将 "\\\\" 变换为 "\000"
  140.       text.gsub!(/\\\\/) { "\000" }
  141.       # "\\C" 变为 "\001" に、"\\G" 变为 "\002"
  142.       text.gsub!(/\\[Cc]\[([0-9]+)\]/) { "\001[#{$1}]" }
  143.       text.gsub!(/\\[Gg]/) { "\002" }
  144.       # c 获取 1 个字 (如果不能取得文字就循环)
  145.       @sprite_pause_x = 0
  146.       @sprite_pause_y = 0
  147.       @c = 0
  148.       while ((c = text.slice!(/./m)) != nil)
  149.         # \\ 的情况下
  150.         if c == "\000"
  151.           # 还原为本来的文字
  152.           c = "\\"
  153.         end
  154.         # \C[n] 的情况下
  155.         if c == "\001"
  156.           # 更改文字色
  157.           text.sub!(/\[([0-9]+)\]/, "")
  158.           color = $1.to_i
  159.           if color >= 0 and color <= 7
  160.             self.contents.font.color = text_color(color)
  161.           end
  162.           # 下面的文字
  163.           next
  164.         end
  165.         # \G 的情况下
  166.         if c == "\002"
  167.           # 生成金钱窗口
  168.           if @gold_window == nil
  169.             @gold_window = Window_Gold.new
  170.             @gold_window.x = 560 - @gold_window.width
  171.             if $game_temp.in_battle
  172.               @gold_window.y = 192
  173.             else
  174.               @gold_window.y = self.y >= 128 ? 32 : 384
  175.             end
  176.             @gold_window.opacity = self.opacity
  177.             @gold_window.back_opacity = self.back_opacity
  178.           end
  179.           # 下面的文字
  180.           next
  181.         end
  182.         # 另起一行文字的情况下
  183.         if c == "\n"
  184.           # 刷新选择项及光标的高
  185.           if y >= $game_temp.choice_start
  186.             @cursor_width = [@cursor_width, x].max
  187.           end
  188.           # y 加 1
  189.           y += 1
  190.           x = 0
  191.          
  192.           # 移动到选择项的下一行
  193.           if y >= $game_temp.choice_start
  194.             x = 8
  195.           end
  196.          
  197.           if y > @sprite_pause_y then
  198.             @sprite_pause_y = y
  199.             @sprite_pause_x = 0
  200.             @c = 0
  201.             if x > @sprite_pause_x   then
  202.               @sprite_pause_x   = x
  203.             end
  204.           end
  205.           # 下面的文字
  206.           next
  207.         end
  208.       
  209.         # 描绘文字
  210.         self.contents.draw_text(4 + x, 32 * y, 40, 32, c)
  211.         # x 为要描绘文字的加法运算
  212.         x += self.contents.text_size(c).width
  213.       
  214.         if x > @sprite_pause_x   then
  215.          
  216.           if c =~ /\[a-z]/ then
  217.            @c += 2
  218.            elsif c =~ /\D/ then
  219.             @c += 3.5
  220.           else
  221.              @c += 4
  222.           end
  223.          
  224.           @sprite_pause_x   = x
  225.         end
  226.         $t = @sprite_pause_x
  227.         $n = @c
  228.       end
  229.       
  230.     end
  231.    
  232.     # 选择项的情况
  233.     if $game_temp.choice_max > 0
  234.       @item_max = $game_temp.choice_max
  235.       self.active = true
  236.       self.index = 0
  237.     end
  238.     # 输入数值的情况
  239.     if $game_temp.num_input_variable_id > 0
  240.       digits_max = $game_temp.num_input_digits_max
  241.       number = $game_variables[$game_temp.num_input_variable_id]
  242.       @input_number_window = Window_InputNumber.new(digits_max)
  243.       @input_number_window.number = number
  244.       @input_number_window.x = self.x + 8
  245.       @input_number_window.y = self.y + $game_temp.num_input_start * 32
  246.     end
  247.   end

  248.   #--------------------------------------------------------------------------
  249.   # ● 刷新画面
  250.   #--------------------------------------------------------------------------
  251.   def update
  252.     super
  253.     @sprite_pause.update
  254.     # 渐变的情况下
  255.     if @fade_in
  256.       self.contents_opacity += 24
  257.       if @input_number_window != nil
  258.         @input_number_window.contents_opacity += 24
  259.       end
  260.       if self.contents_opacity == 255
  261.         @fade_in = false
  262.       end
  263.       return
  264.     end
  265.     # 输入数值的情况下
  266.     if @input_number_window != nil
  267.       @input_number_window.update
  268.       # 确定
  269.       if Input.trigger?(Input::C)
  270.         $game_system.se_play($data_system.decision_se)
  271.         $game_variables[$game_temp.num_input_variable_id] =
  272.           @input_number_window.number
  273.         $game_map.need_refresh = true
  274.         # 释放输入数值窗口
  275.         @input_number_window.dispose
  276.         @input_number_window = nil
  277.         terminate_message
  278.       end
  279.       return
  280.     end
  281.     # 显示信息中的情况下
  282.     if @contents_showing
  283.       # 如果不是在显示选择项中就显示暂停标志
  284.       if $game_temp.choice_max == 0
  285.         @sprite_pause.visible = true
  286.         self.pause = false
  287.       end
  288.       # 取消
  289.       if Input.trigger?(Input::B)
  290.         if $game_temp.choice_max > 0 and $game_temp.choice_cancel_type > 0
  291.           $game_system.se_play($data_system.cancel_se)
  292.           $game_temp.choice_proc.call($game_temp.choice_cancel_type - 1)
  293.           terminate_message
  294.         end
  295.       end
  296.       # 确定
  297.       if Input.trigger?(Input::C)
  298.         if $game_temp.choice_max > 0
  299.           $game_system.se_play($data_system.decision_se)
  300.           $game_temp.choice_proc.call(self.index)
  301.         end
  302.         terminate_message
  303.       end
  304.       return
  305.     end
  306.     # 在渐变以外的状态下有等待显示的信息与选择项的场合
  307.     if @fade_out == false and $game_temp.message_text != nil
  308.       @contents_showing = true
  309.       $game_temp.message_window_showing = true
  310.       reset_window
  311.       refresh
  312.       
  313.       @sprite_pause.x = self.x + $t + $n + 5
  314.       @sprite_pause.y = @sprite_pause_y * 32 +self.y
  315.      
  316.       Graphics.frame_reset
  317.       self.visible = true
  318.       self.contents_opacity = 0
  319.       if @input_number_window != nil
  320.         @input_number_window.contents_opacity = 0
  321.       end
  322.       @fade_in = true
  323.       return
  324.     end
  325.     # 没有可以显示的信息、但是窗口为可见的情况下
  326.     if self.visible
  327.       @fade_out = true
  328.       self.opacity -= 48
  329.       if self.opacity == 0
  330.         self.visible = false
  331.         @fade_out = false
  332.         $game_temp.message_window_showing = false
  333.       end
  334.       return
  335.     end
  336.   end

  337. end
复制代码

作者: 做游戏的新手    时间: 2008-8-27 00:39
虾米意思
作者: 阁中人    时间: 2008-8-27 00:51
就是把原来固定在对话框中部下端的那个小三角的位置改变到文字的后部,看起来比较顺眼。

不错的小细节。
作者: 越前リョーマ    时间: 2008-8-27 00:53
很完美的小细节……
作者: orochi2k    时间: 2008-8-27 04:52
嗯,效果不错的样子,偶来思考下不看脚本进行仿制{/cy}
作者: 精灵使者    时间: 2008-8-27 05:11
不错,魔神战记里面有个这样的风格,而且是心情标记
作者: 灯笼菜刀王    时间: 2008-8-27 12:23
我想说的是....

很棒的东西~~可惜我用不上....因为我用的是FUKI -。-...

支持dbshy君~~~

小声的说,为什么有的if后面没加then呢?不符合你的习惯嘛~~~
作者: dbshy    时间: 2008-8-27 21:16
以下引用灯笼菜刀王于2008-8-27 4:23:38的发言:
小声的说,为什么有的if后面没加then呢?不符合你的习惯嘛~~~



我记得都写了,如果你指的是默认脚本中WINDOW_MESSAGE,那我就懒得加了
太多了,虽然我看的不爽 = =bbb

另外WAIT_COUNT最好设置为5,才不会太快或太慢


作者: IamI    时间: 2008-8-27 21:20
基本原理是原来的pause全屏蔽然后再另起炉灶?
恩,if...then MS是VB专有,找到同仁了= =




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