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

Project1

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

[已经解决] fuki对话框有没有办法修改加脸图不用加空格

[复制链接]

Lv4.逐梦者

梦石
5
星屑
1823
在线时间
339 小时
注册时间
2014-4-1
帖子
270
跳转到指定楼层
1
发表于 2014-8-25 18:55:08 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
RT
个人觉得太麻烦了,为什么fuki加脸图一定要加空格呢?
有没有办法修改脚本不用加空格
大神快来把

点评

因为fuki自动适应对话内容,设置对话框大小。  发表于 2014-8-25 18:56

Lv4.逐梦者

梦石
5
星屑
1823
在线时间
339 小时
注册时间
2014-4-1
帖子
270
2
 楼主| 发表于 2014-8-25 18:59:55 | 只看该作者
所以需要加空格。(吐槽一下,为什么我在主楼不能点评)
回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

无限の剣制

梦石
0
星屑
10014
在线时间
5019 小时
注册时间
2013-2-28
帖子
5030

开拓者贵宾

3
发表于 2014-8-25 19:04:19 | 只看该作者
funxlww 发表于 2014-8-25 18:59
所以需要加空格。(吐槽一下,为什么我在主楼不能点评)

如果,你不需要他去自动适应高度那么就改成这样吧。默认高度 120
  1. #==============================================================================
  2. #
  3. # ¥ Yami Engine Ace - Pop Message
  4. # -- Last Updated: 2012.06.07
  5. # -- Level: Normal
  6. # -- Requires: n/a
  7. #
  8. #==============================================================================

  9. $imported = {} if $imported.nil?
  10. $imported["YSE-PopMessage"] = true

  11. #==============================================================================
  12. # ¥ Updates
  13. # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  14. # 2012.06.07 - Fixed Compatible: YEA - Ace Message System.
  15. # 2012.05.11 - Fixed Message Position.
  16. #            - Remove Requirement: YSE - Fix Events Order.
  17. # 2012.05.07 - Fixed Face position.
  18. #            - Added Requirement: YSE - Fix Events Order.
  19. # 2012.04.06 - You can change Bubble Tag filename.
  20. # 2012.03.28 - Fixed Default Message Position and Sizes.
  21. # 2012.03.27 - Fixed Default Message.
  22. # 2012.03.27 - Added Bubble Tag.
  23. # 2012.03.25 - Fixed Escape Message.
  24. # 2012.03.24 - Fixed Battle Message.
  25. # 2012.03.24 - Rewrote script.
  26. #
  27. #==============================================================================
  28. # ¥ Instructions
  29. # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  30. # To install this script, open up your script editor and copy/paste this script
  31. # to an open slot below ¥ Materials/‘fÞ but above ¥ Main. Remember to save.
  32. #
  33. # -----------------------------------------------------------------------------
  34. # Message Window text Codes - These go inside of your message window.
  35. # -----------------------------------------------------------------------------
  36. #  Position:   Effect:
  37. #    \bm[x]    - Sets Message Window position to event x. *Note
  38. #    \cbm      - Cancel bubble message.
  39. #
  40. #              *Note: Set to 0 to sets position to Game Player.
  41. #
  42. #==============================================================================
  43. # ¥ Compatibility
  44. # =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  45. # This script is made strictly for RPG Maker VX Ace. It is highly unlikely that
  46. # it will run with RPG Maker VX without adjusting.
  47. #
  48. #==============================================================================

  49. module YSE
  50.   module POP_MESSAGE
  51.    
  52.     #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  53.     # - Visual Settings -
  54.     #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  55.     LIMIT = { # Start.
  56.       :limit_width    =>  0,  # Set to 0 to disable limit.
  57.       :limit_line     =>  6,  # Set to 0 to disable limit.
  58.     } # End.
  59.    
  60.     POSITION = { # Start.
  61.       :x_buffer       =>  0,
  62.       :y_buffer       =>  -36,
  63.       :face_x_buffer  =>  8,
  64.       :face_y_buffer  =>  24,
  65.       :tag_y_buffer   =>  -6,
  66.       :name_x_buffer  =>  112, # Require YEA - Message System.
  67.     } # End.
  68.    
  69.     EFFECT = { # Start.
  70.       :fade_face       =>  true,
  71.       :move_face       =>  true,
  72.       :use_bubble_tag  =>  true,
  73.       :bubble_tag_name => "BubbleTag",
  74.     } # End.
  75.    
  76.   end
  77. end

  78. #==============================================================================
  79. # ¥ Editting anything past this point may potentially result in causing
  80. # computer damage, incontinence, explosion of user's head, coma, death, and/or
  81. # halitosis so edit at your own risk.
  82. #==============================================================================

  83. #==============================================================================
  84. # ¡ Spriteset_Map
  85. #==============================================================================

  86. class Spriteset_Map
  87.   
  88.   #--------------------------------------------------------------------------
  89.   # public instance variables
  90.   #--------------------------------------------------------------------------
  91.   attr_accessor :character_sprites
  92.   
  93. end # Spriteset_Map

  94. #==============================================================================
  95. # ¡ Window_Message_Face
  96. #==============================================================================

  97. class Window_Message_Face < Window_Base
  98.   
  99.   #--------------------------------------------------------------------------
  100.   # initialize
  101.   #--------------------------------------------------------------------------
  102.   def initialize
  103.     super(0, 0, 120, 120)
  104.     self.opacity = 0
  105.     @face_name = ""
  106.     @face_index = 0
  107.     @move_x = 0
  108.     close
  109.   end
  110.   
  111.   #--------------------------------------------------------------------------
  112.   # message_window=
  113.   #--------------------------------------------------------------------------
  114.   def message_window=(window)
  115.     @message_window = window
  116.   end
  117.   
  118.   #--------------------------------------------------------------------------
  119.   # set_face
  120.   #--------------------------------------------------------------------------
  121.   def set_face
  122.     contents.clear
  123.     return unless @message_window
  124.     if !$game_message.face_name.empty?
  125.       draw_face($game_message.face_name, $game_message.face_index, 0, 0)
  126.       set_position
  127.       show_face
  128.     else
  129.       hide_face
  130.     end
  131.   end
  132.   
  133.   #--------------------------------------------------------------------------
  134.   # set_position
  135.   #--------------------------------------------------------------------------
  136.   def set_position
  137.     return unless @message_window
  138.     self.x = @message_window.x
  139.     self.y = @message_window.y - 96
  140.     self.x += YSE::POP_MESSAGE::POSITION[:face_x_buffer]
  141.     self.y += YSE::POP_MESSAGE::POSITION[:face_y_buffer]
  142.     self.y += (@message_window.real_lines - 1) * 24
  143.     self.z = @message_window.z + 1
  144.     if (@face_name != $game_message.face_name || @face_index != $game_message.face_index)
  145.       if YSE::POP_MESSAGE::EFFECT[:move_face]
  146.         @move_x = 30
  147.         self.x -= 30
  148.       end
  149.       @face_name = $game_message.face_name
  150.       @face_index = $game_message.face_index
  151.       self.contents_opacity = 0 if YSE::POP_MESSAGE::EFFECT[:fade_face]
  152.     end
  153.   end
  154.   
  155.   #--------------------------------------------------------------------------
  156.   # show_face
  157.   #--------------------------------------------------------------------------
  158.   def show_face
  159.     open
  160.   end
  161.   
  162.   #--------------------------------------------------------------------------
  163.   # hide_face
  164.   #--------------------------------------------------------------------------
  165.   def hide_face
  166.     contents.clear
  167.     close
  168.   end
  169.   
  170.   #--------------------------------------------------------------------------
  171.   # update
  172.   #--------------------------------------------------------------------------
  173.   def update
  174.     super
  175.     self.contents_opacity += 15 if self.contents_opacity < 255
  176.     unless @move_x <= 0
  177.       self.x += 2
  178.       @move_x -= 2
  179.     end
  180.   end
  181.   
  182. end # Sprite_Message_Face

  183. #==============================================================================
  184. # ¡ Window_Message
  185. #==============================================================================

  186. class Window_Message < Window_Base
  187.   
  188.   #--------------------------------------------------------------------------
  189.   # new method: face_window=
  190.   #--------------------------------------------------------------------------
  191.   def face_window=(window)
  192.     @face_window = window
  193.   end
  194.   
  195.   #--------------------------------------------------------------------------
  196.   # new method: bubble_tag=
  197.   #--------------------------------------------------------------------------
  198.   def bubble_tag=(sprite)
  199.     @bubble_tag = sprite
  200.   end
  201.   
  202.   #--------------------------------------------------------------------------
  203.   # new method: message_escape_characters_pop_message
  204.   #--------------------------------------------------------------------------
  205.   def message_escape_characters_pop_message(result)
  206.     result.gsub!(/\eBM\[(\d+)\]/i) { event_pop_message_setup($1.to_i, false) }
  207.     result.gsub!(/\eBMF\[(\d+)\]/i) { event_pop_message_setup($1.to_i, true) }
  208.     result.gsub!(/\eCBM/i) { event_pop_message_setup(nil, false) }
  209.     result
  210.   end
  211.   
  212.   #--------------------------------------------------------------------------
  213.   # alias method: convert_escape_characters
  214.   #--------------------------------------------------------------------------
  215.   alias yse_convert_escape_characters_pm convert_escape_characters
  216.   def convert_escape_characters(text)
  217.     result = yse_convert_escape_characters_pm(text)
  218.     result = message_escape_characters_pop_message(result)
  219.     result
  220.   end
  221.   
  222.   #--------------------------------------------------------------------------
  223.   # new method: event_pop_message_setup
  224.   #--------------------------------------------------------------------------
  225.   def event_pop_message_setup(event_id, follower = false)
  226.     if follower && $game_player.followers[event_id].nil?
  227.       @event_pop_id = nil
  228.       @event_pop_follower = false
  229.       return ""
  230.     end
  231.     @event_pop_follower = follower
  232.     @event_pop_id = event_id
  233.     return ""
  234.   end
  235.   
  236.   #--------------------------------------------------------------------------
  237.   # new method: set_face_position
  238.   #--------------------------------------------------------------------------
  239.   def set_face_position
  240.     return unless SceneManager.scene_is?(Scene_Map)
  241.     return unless @event_pop_id
  242.     return unless @face_window
  243.     contents.clear
  244.     @face_window.set_face
  245.     return unless $imported["YEA-MessageSystem"]
  246.     return if @face_window.close?
  247.     #@name_window.x = self.x + YSE::POP_MESSAGE::POSITION[:face_x_buffer] + YSE::POP_MESSAGE::POSITION[:name_x_buffer] if (@name_position == 1 || @name_position == 2)
  248.   end
  249.   
  250.   #--------------------------------------------------------------------------
  251.   # alias method: new_page
  252.   #--------------------------------------------------------------------------
  253.   alias window_message_new_page_pm_yse new_page
  254.   def new_page(text, pos)
  255.     window_message_new_page_pm_yse(text, pos)
  256.     set_face_position
  257.   end
  258.   
  259.   #--------------------------------------------------------------------------
  260.   # alias method: close
  261.   #--------------------------------------------------------------------------
  262.   alias pop_message_close close
  263.   def close
  264.     pop_message_close
  265.     return unless SceneManager.scene_is?(Scene_Map)
  266.     return unless @event_pop_id
  267.     @event_pop_id = nil
  268.     @event_pop_follower = false
  269.     @face_window.hide_face
  270.     return unless YSE::POP_MESSAGE::EFFECT[:use_bubble_tag]
  271.     @bubble_tag.visible = false if @bubble_tag
  272.   end
  273.   
  274.   #--------------------------------------------------------------------------
  275.   # alias method: open_and_wait
  276.   #--------------------------------------------------------------------------
  277.   alias pop_message_open_and_wait open_and_wait
  278.   def open_and_wait
  279.     pop_message_open_and_wait
  280.     return unless YSE::POP_MESSAGE::EFFECT[:use_bubble_tag]
  281.     @bubble_tag.visible = true if @event_pop_id && @bubble_tag
  282.   end
  283.   
  284.   #--------------------------------------------------------------------------
  285.   # alias method: process_all_text
  286.   #--------------------------------------------------------------------------
  287.   alias pop_message_process_all_text process_all_text
  288.   def process_all_text
  289.     @event_pop_id = nil
  290.     convert_escape_characters($game_message.all_text)
  291.     update_placement
  292.     adjust_pop_message($game_message.all_text)
  293.     pop_message_process_all_text
  294.   end

  295.   #--------------------------------------------------------------------------
  296.   # alias method: update_placement
  297.   #--------------------------------------------------------------------------
  298.   alias event_pop_message_update_placement update_placement
  299.   def update_placement
  300.     if SceneManager.scene_is?(Scene_Map)
  301.       if @event_pop_id.nil?
  302.         fix_default_message
  303.         event_pop_message_update_placement
  304.       elsif @event_pop_id == 0
  305.         character = $game_player
  306.         self.y = character.screen_y - self.height + YSE::POP_MESSAGE::POSITION[:y_buffer]
  307.         self.x = character.screen_x - self.width / 2 + YSE::POP_MESSAGE::POSITION[:x_buffer]
  308.         fix_position_bubble(character)
  309.         set_bubble_tag(character)
  310.       elsif @event_pop_id > 0
  311.         hash = @event_pop_follower ? $game_player.followers : $game_map.events
  312.         character = hash[@event_pop_id]
  313.         self.y = character.screen_y - self.height + YSE::POP_MESSAGE::POSITION[:y_buffer]
  314.         self.x = character.screen_x - self.width / 2 + YSE::POP_MESSAGE::POSITION[:x_buffer]
  315.         fix_position_bubble(character)
  316.         set_bubble_tag(character)
  317.       end
  318.     else
  319.       event_pop_message_update_placement
  320.     end
  321.   end
  322.   
  323.   #--------------------------------------------------------------------------
  324.   # new method: fix_default_message
  325.   #--------------------------------------------------------------------------
  326.   def fix_default_message
  327.     self.width = window_width
  328.     self.height = window_height
  329.     self.x = 0
  330.     @face_window.hide_face if @face_window
  331.     create_contents
  332.     return unless YSE::POP_MESSAGE::EFFECT[:use_bubble_tag]
  333.     @bubble_tag.visible = false if @bubble_tag
  334.   end
  335.   
  336.   #--------------------------------------------------------------------------
  337.   # new method: fix_position_bubble
  338.   #--------------------------------------------------------------------------
  339.   def fix_position_bubble(character)
  340.     end_x = self.x + self.width
  341.     end_y = self.y + self.height
  342.     self.x = 0 if self.x < 0
  343.     self.y = character.screen_y if self.y < 0
  344.     self.x = Graphics.width - self.width if end_x > Graphics.width
  345.     self.y = Graphics.height - self.height if end_y > Graphics.height
  346.   end
  347.   
  348.   #--------------------------------------------------------------------------
  349.   # new method: set_bubble_tag
  350.   #--------------------------------------------------------------------------
  351.   def set_bubble_tag(character)
  352.     return unless YSE::POP_MESSAGE::EFFECT[:use_bubble_tag]
  353.     return unless @bubble_tag
  354.     up = self.y == character.screen_y
  355.     self.y += up ? @bubble_tag.height / 2 : -@bubble_tag.height / 2
  356.     @bubble_tag.x = character.screen_x - @bubble_tag.width / 2
  357.     if up
  358.       @bubble_tag.src_rect.set(0, @bubble_tag.height, @bubble_tag.width, @bubble_tag.height)
  359.       @bubble_tag.y = self.y - @bubble_tag.height - YSE::POP_MESSAGE::POSITION[:tag_y_buffer]
  360.     else
  361.       @bubble_tag.src_rect.set(0, 0, @bubble_tag.width, @bubble_tag.height)
  362.       @bubble_tag.y = self.y + self.height + YSE::POP_MESSAGE::POSITION[:tag_y_buffer]
  363.     end
  364.   end
  365.   
  366.   #--------------------------------------------------------------------------
  367.   # new method: cal_number_line
  368.   #--------------------------------------------------------------------------
  369.   def cal_number_line(text)
  370.     result = 0
  371.     text.each_line { result += 1 }
  372.     return result
  373.   end
  374.   
  375.   #--------------------------------------------------------------------------
  376.   # new method: cal_width_line
  377.   #--------------------------------------------------------------------------
  378.   def cal_width_line(text)
  379.     result = 0
  380.     text.each_line { |line|
  381.       result = text_size(line).width if result < text_size(line).width
  382.     }
  383.     return result
  384.   end

  385.   #--------------------------------------------------------------------------
  386.   # alias method: adjust_message_window_size
  387.   #--------------------------------------------------------------------------
  388.   if $imported["YEA-MessageSystem"]
  389.   alias yse_pop_message_adjust_message_window_size adjust_message_window_size
  390.   def adjust_message_window_size
  391.     start_name_window if @event_pop_id
  392.     return if @event_pop_id
  393.     yse_pop_message_adjust_message_window_size
  394.   end
  395.   end
  396.   
  397.   #--------------------------------------------------------------------------
  398.   # new method: adjust_pop_message
  399.   #--------------------------------------------------------------------------
  400.   def adjust_pop_message(text = " ")
  401.     return unless SceneManager.scene_is?(Scene_Map)
  402.     unless @event_pop_id
  403.       if $imported["YEA-MessageSystem"]
  404.         #adjust_message_window_size
  405.       end
  406.       return
  407.     end
  408.     n_line = cal_number_line(text)
  409.     n_line = YSE::POP_MESSAGE::LIMIT[:limit_line] if YSE::POP_MESSAGE::LIMIT[:limit_line] > 0 && cal_number_line(text) > YSE::POP_MESSAGE::LIMIT[:limit_line]
  410.     @real_lines = n_line
  411.     self.height = 120#fitting_height(n_line)
  412.     self.width = cal_width_line(text) + 24
  413.     self.width += new_line_x
  414.     if self.width > YSE::POP_MESSAGE::LIMIT[:limit_width] && YSE::POP_MESSAGE::LIMIT[:limit_width] > 0
  415.       self.width = YSE::POP_MESSAGE::LIMIT[:limit_width]
  416.     end
  417.     create_contents
  418.     update_placement
  419.   end
  420.   
  421.   #--------------------------------------------------------------------------
  422.   # overwrite method: new_line_x
  423.   #--------------------------------------------------------------------------
  424.   def new_line_x
  425.     if $game_message.face_name.empty?
  426.       return 0
  427.     else
  428.       result = YSE::POP_MESSAGE::POSITION[:face_x_buffer]
  429.       p_x = $imported["YEA-MessageSystem"] ? YEA::MESSAGE::FACE_INDENT_X : 112
  430.       result += p_x
  431.       return result
  432.     end
  433.   end
  434.   
  435.   #--------------------------------------------------------------------------
  436.   # new method: real_lines
  437.   #--------------------------------------------------------------------------
  438.   def real_lines
  439.     @real_lines
  440.   end
  441.   
  442. end # Window_Message

  443. #==============================================================================
  444. # ¡ Scene_Map
  445. #==============================================================================

  446. class Scene_Map < Scene_Base
  447.   
  448.   #--------------------------------------------------------------------------
  449.   # alias method: create_message_window
  450.   #--------------------------------------------------------------------------
  451.   alias yse_pm_create_message_window create_message_window
  452.   def create_message_window
  453.     yse_pm_create_message_window
  454.     @face_window = Window_Message_Face.new
  455.     @face_window.message_window = @message_window
  456.     if YSE::POP_MESSAGE::EFFECT[:use_bubble_tag]
  457.       @bubble_tag_sprite = Sprite.new
  458.       @bubble_tag_sprite.visible = false
  459.       @bubble_tag_sprite.bitmap = Cache.system(YSE::POP_MESSAGE::EFFECT[:bubble_tag_name])
  460.       @bubble_tag_sprite.src_rect.set(0, 0, @bubble_tag_sprite.width, @bubble_tag_sprite.height / 2)
  461.       @message_window.bubble_tag = @bubble_tag_sprite
  462.     end
  463.     @message_window.face_window = @face_window
  464.   end
  465.   
  466.   #--------------------------------------------------------------------------
  467.   # alias method: dispose_spriteset
  468.   #--------------------------------------------------------------------------
  469.   alias pop_message_dispose_spriteset dispose_spriteset
  470.   def dispose_spriteset
  471.     pop_message_dispose_spriteset
  472.     return unless @bubble_tag_sprite
  473.     @bubble_tag_sprite.dispose
  474.   end
  475.   
  476. end # Scene_Map

  477. #==============================================================================
  478. #
  479. # ¥ End of File
  480. #
  481. #==============================================================================
复制代码

评分

参与人数 1梦石 +1 收起 理由
taroxd + 1 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
5
星屑
1823
在线时间
339 小时
注册时间
2014-4-1
帖子
270
4
 楼主| 发表于 2014-8-25 19:09:31 | 只看该作者
VIPArcher 发表于 2014-8-25 19:04
如果,你不需要他去自动适应高度那么就改成这样吧。默认高度 120
  1. =begin
  2. 吹きだしウィンドウVXAce

  3. 2011.12.25 tamura改造
  4. 2012年02月28日 改訂

  5. ※このスクリプトは、ちいさな本屋様([url]http://xrxs.at-ninja.jp/[/url])
  6. が製作されたものをtamuraがACE用に改造した物です。

  7. 原版:
  8. ▽▽▽ XRXSv2. メッセージ表示フルグレードアップVX ▽▽▽
  9. publish 2010/ 3/ 2
  10. update  - 11/ 1/10a


  11. ※※警告※※
  12. 「立ち絵機能」をONにしている時に、立ち絵を表示せずに、ウィンドウ位置を
  13. 右か左に変更した時、テールのY座標がずれるようです。
  14. 原因は調査中です。立ち絵を表示しない時は、イベントコマンド「注釈」で、
  15. 「立ち絵表示 off」と記述して立ち絵機能をOFFにしておいてください。

  16. ●機能一覧
  17. ?イベントコマンド「スクリプト」で、$win_x $win_yに値を入力すると、
  18.  ($win_x 、$win_y)の位置にウィンドウを表示する。画面左上が(0,0)。

  19. ?キーボードのQ(装備画面で前のキャラに戻るボタン)を押すと、
  20.  ウィンドウが消える。Qか決定、キャンセルキーで元に戻る。

  21. ?文章のどこでもいいので、以下の表記を行う。
  22. ? \name[] : []の中の文字を、ウィンドウ左上に小さく表示する。

  23. \h[-1] : プレーヤーの上にウィンドウをポップ。
  24. \h[0] : 現在アクティブのイベントの上にウィンドウをポップ。
  25. \h[1] : IDが1番のイベントの上にウィンドウをポップする。
  26. hは大文字でもOK。

  27. ウィンドウは通常の大きさのまま、テールだけ表示したい場合は、
  28. \t[-2] : ウィンドウが上下に表示される時は、X座標をMINAS_TWE_X_POSで固定。
  29.            $win_x で左右に表示される時は、Y座標がウィンドウの中心やや下で固定。
  30. \t[-3] : ウィンドウが上下に表示される時は、X座標をMINAS_THREE_X_POSで固定。
  31.            $win_x で左右に表示される時は、Y座標がウィンドウの中心やや下で固定。
  32. \t[-1] : プレーヤーの上に向かってテール表示。
  33. \t[0] : 現在アクティブのイベントに向かってテール表示。
  34. \t[1] : IDが1番のイベントの上に向かってテール表示。

  35. \O[128] : 文字を透明にする。128はalphaの値で、0で透明、255で通常。
  36. \D : 文字に影をつける
  37. \hold : メッセージ表示の、最後の文章に限定。
  38.      メッセージが終わっても、ウィンドウを閉じずに残します。
  39.      他のメッセージが表示されて次へ送られる時に消えます。
  40.      なお、ホールドされているウィンドウは、Qボタンで消せません。


  41. ●その他
  42. ?ACEに標準装備されている機能は通常通り使用できます。
  43. ?A1殿([url]http://a1tktk.web.fc2.com/[/url])の立ち絵スクリプトに対応しています。
  44.  このスクリプトの上に「RGSS3用A1共通処理」
  45.  このスクリプトの下に「空メッセージでウィンドウを開かない」「立ち絵表示」を
  46.  配置して下さい。
  47.  残念ながら、「ネームウィンドウ」は使えません。上記\nameをお使いください。
  48. ※立ち絵を表示しない時は、注釈で「立ち絵表示 off」とした方が無難です。
  49. ?イベントの下から話しかけたら上へポップ、上から話しかけたら下へポップするという
  50.  機能を追加。カスタマイズポイントで POP_DIRECTION = ture と変更のこと。


  51. ●廃止機能 
  52. ?\Iがすでに使われているので、イタリック文字変換を廃止。
  53. ?スピード変更、改行、最後に入手したアイテムの表示を、ACE化にともない廃止。


  54. 【改訂履歴】
  55. 2012.01.10  ?ウィンドウを消したまま次のウィンドウを自動で表示すると、
  56.               ネームウィンドウが表示されるのを修正。
  57. 2012.01.11  ?ネームウィンドウが出しっぱなしになるのを修正。
  58. 2012.01.12  ?メニューを出してから決定ボタンを押すとネームウィンドウがでる不具合の修正。
  59. 2012.02.01 ?ネームウィンドウのオープン&クローズのタイミングを変更。
  60.       ?hold機能を追加。
  61. 2012.02.10 ?キャラポップした時、一行ずつしか表示されない不具合を修正。
  62. 2012.02.14 ?アイテム名などの文字数が正常に取得できなかったのを修正。
  63. 2012.02.21 ?話しかけられた方向によって、ポップ方向を変えられるようにした。
  64. 2012.02.25 ?すべてのシーン遷移の際はテールを破棄(イベント中でショップ起動など)
  65. 2012.02.28 ?エスケープ文字の処理が上手くいかない問題について暫定対策。

  66. =end

  67. #==============================================================================
  68. # カスタマイズポイント
  69. #==============================================================================
  70. #=begin
  71. class Window_Message < Window_Base
  72.   #
  73.   # 基本行数
  74.   #
  75.   MAX_LINE = 4
  76.   #
  77.   # \p[] - キャラポップの高さ
  78.   #
  79.   CHARPOP_HEIGHT = 40
  80.   #
  81.   # \name[] - 名前枠 X,Y座標
  82.   #
  83.   NAME_WINDOW_OFFSET_X =   0
  84.   NAME_WINDOW_OFFSET_Y = -24
  85.   #
  86.   #
  87.   MINAS_TWE_X_POS = 100 # $t[-2]のときの、テールのX座標。
  88.   MINAS_THREE_X_POS = 444 # $t[-3]のときの、テールのX座標。

  89.   POP_DIRECTION = false #イベントの方向を考慮。
  90. end
  91. #==============================================================================
  92. # 参照機能
  93. #==============================================================================
  94. class Game_Temp
  95.   attr_accessor :last_gain_material
  96.   attr_accessor :last_gain_holder
  97. end
  98. #==============================================================================
  99. # フルグレードアップベース - 制御文字?基本機能
  100. #==============================================================================
  101. class Window_Message < Window_Base
  102.   attr_accessor :tail
  103.   #--------------------------------------------------------------------------
  104.   # ● 特殊文字の変換 + 準備
  105.   #     変換?消去してもいい部分を処理、フラグのセット。
  106.   #--------------------------------------------------------------------------
  107.   alias xrxsv2_convert_escape_characters convert_escape_characters
  108.   def convert_escape_characters(text)
  109.     #@textsが使いずらいので、ここで別変数に保管。
  110.     @all_texts = []
  111.     str = text.gsub(/\\/) { "\e" }
  112.     @all_texts = str.split("\n")

  113.     # 初期化
  114.     contents.font.size   = Font.default_size
  115.     contents.font.bold   = Font.default_italic
  116.     contents.font.italic = Font.default_bold
  117.     contents.font.shadow = Font.default_shadow
  118.     @type_wait = 0
  119.     @line_widths = []
  120.     @line_aligns = []
  121.     self.pop_character = nil
  122.     # ウィンドウ保持指定\holdがあるか?
  123.     @window_hold = (text.gsub!(/\\hold/) { "" } != nil)
  124.     # \info
  125.     @info_mode = (text.gsub!(/\\info/) { "" } != nil)
  126.     # 改行削除指定\_があるか?
  127.     if (/\\_(.*?)\x00/.match(@text)) != nil
  128.       $game_message.choice_start -= 1
  129.       text.gsub!(/\\_(.*?)\x00/) { $1.to_s }
  130.     end
  131.     # \name 判定
  132.     if text.sub!(/\\[Nn]ame\[(.*?)\]/) { "" }
  133.       name = $1
  134.       bitmap = @name_sprite.bitmap
  135.       w = [bitmap.text_size(name).width, 1].max
  136.       w = w + 32 ###SR
  137.       bitmap.dispose
  138.       @name_sprite.bitmap = Bitmap.new(w, 32)
  139.       bitmap = @name_sprite.bitmap
  140.       bitmap.draw_text(0, 0, bitmap.width, bitmap.height, name)
  141.       @name_window.width = w + 16
  142.       @name_window.create_contents
  143.       @name_window.open if @name_window.openness == 0
  144.       if self.visible #名前だけ表示されるのを防止。
  145.         @name_window.visible = true
  146.         @name_sprite.visible = true
  147.       else
  148.         @name_window.visible = false
  149.         @name_sprite.visible = false
  150.       end
  151.     else
  152.       @name_window.visible = false
  153.       @name_sprite.visible = false
  154.       @name_sprite.bitmap.dispose
  155.       @name_sprite.bitmap = Bitmap.new(32,32)
  156.     end
  157.     $name = $1 #あれこれで使うので、ネームウィンドウに表示予定の名前を取得。
  158.     # キャラボップモード
  159.     if text.gsub!(/\\[Hh]\[-1\]/) { "" }
  160.       self.pop_character = -1
  161.     elsif text.gsub!(/\\[Hh]\[([0-9]+)\]/) { "" }
  162.       self.pop_character = $1.to_i
  163.     elsif text.gsub!(/\\[Hh]/) { "" }
  164.       self.pop_character = 0
  165.     #テール表示モード
  166.     elsif text.gsub!(/\\[Tt]\[-1\]/) { "" }
  167.       self.tail_character = -1
  168.     elsif text.gsub!(/\\[Tt]\[-2\]/) { "" }
  169.       self.tail_character = -2
  170.     elsif text.gsub!(/\\[Tt]\[-3\]/) { "" }
  171.       self.tail_character = -3
  172.     elsif text.gsub!(/\\[Tt]\[([0-9]+)\]/) { "" }
  173.       self.tail_character = $1.to_i
  174.     elsif text.gsub!(/\\[Tt]/) { "" }
  175.       self.tail_character = 0
  176.     else
  177.       self.pop_character = nil
  178.     end

  179.     # 制御文字処理
  180.     text = xrxsv2_convert_escape_characters(text)
  181.     text.gsub!(/\\[Ss]\[([0-9]+)\]/i) { "\eS[#{$1}]" }
  182.     text.gsub!(/\\[Oo]\[([0-9]+)\]/i) { "\eO[#{$1}]" }
  183.     text.gsub!(/\\last_holder/i) { "\e18" }
  184.     text.gsub!(/\\last_material/i) { "\e19" }
  185.     text.gsub!(/\\B/) { "\eB" }
  186.     text.gsub!(/\\D/) { "\eD" }
  187.     #text.gsub!(/\\n/) { "\n" }
  188.     #
  189.     # ライン情報の取得
  190.     rxs = ["\x01","\x02","\x03","\x04","\x05","\x06","\x07","\x08",
  191.       /\[([0-9]+)\]/,
  192.       "\x11","\x12","\x13","\x14", "\x15", "\x16", "\x17", "\x18","\x19"]
  193.     lines = text.split("\x00")
  194.     @lines_max = lines.size
  195.     for i in 0...@lines_max
  196.       line = lines[i]
  197.       for rx in rxs
  198.         line.gsub!(rx) {""}
  199.       end
  200.       @line_aligns[i] =
  201.         line.sub!(/\\center/) {""} ? CENTER :
  202.         line.sub!(/\\right/)  {""} ? RIGHT :
  203.                                      AUTO
  204.       # 行の横幅の取得と設定
  205.       cx = text_width_no_escape(line,text) #test
  206.       #cx = contents.text_size(line,text).width
  207.       @line_widths[i] = cx
  208.     end
  209.     # 位置揃え制御文字の削除
  210.     text.gsub!(/\\center/) {""}
  211.     text.gsub!(/\\right/) {""}
  212.     # キャラポップ時のウィンドウリサイズ
  213.     reszie_window_for_pop

  214.     del_tail # if @tail != nil
  215.     # $mes_id が空のときと戦闘中はふきだしを表示しない
  216.     if defined?($game_system.show_stand_picture) #立ち絵に対応。
  217.       $mes_id = -1 if $game_system.show_stand_picture == true
  218.     end
  219.     if $mes_id != nil and not $game_party.in_battle
  220.       # ふきだしのテールを描画
  221.       skin = "Window"
  222.       if @background == 0
  223.         #画像の準備
  224.         @tail = Sprite.new
  225.         @tail.visible = false
  226.         # 位置を取得
  227.         tale_pos = get_tale_pos
  228.         if $win_x != nil
  229.           if $win_x > 0
  230.             @tail.bitmap = Cache.system(skin + "-right")
  231.             @tail.x = tale_pos[0]
  232.             @tail.y = tale_pos[1]
  233.             @tail.z = self.z + 1
  234.           elsif  $win_x < 0
  235.             @tail.bitmap = Cache.system(skin + "-left")
  236.             @tail.x = tale_pos[0]
  237.             @tail.y = tale_pos[1]
  238.             @tail.z = self.z + 1
  239.           else
  240.             create_tail_up_under
  241.           end
  242.         else
  243.           create_tail_up_under
  244.         end
  245.         # エクストラスプライトに登録
  246.         @extra_sprites = [] if @extra_sprites.nil?
  247.         @extra_sprites.push(@tail) if @tail != nil
  248.         # 更新
  249.         update_tail
  250.       end
  251.     end

  252.     open_and_wait #リサイズが終わった時点でウィンドウオープン。

  253.     return text
  254.   end
  255.   #--------------------------------------------------------------------------
  256.   # ● 文字の長さを取得する。エスケープ文字は含まない。
  257.   # line : 表示しようとしている全ての文字列。
  258.   # text : その列の文字。
  259.   #--------------------------------------------------------------------------
  260.   def text_width_no_escape(line , text_o)
  261.     add = 0
  262.     text = Marshal.load(Marshal.dump(text_o))
  263.     text.gsub!(/\ehold/) { "" }
  264.     text.gsub!(/\einfo/) { "" }
  265.     # 改行削除指定\_があるか?
  266.     if (/\\_(.*?)\x00/.match(@text)) != nil
  267.       $game_message.choice_start -= 1
  268.       text.gsub!(/\\_(.*?)\x00/) { "" }
  269.     end
  270.     # \name 判定
  271.     text.sub!(/\e[Nn]ame\[(.*?)\]/) { "" }
  272.     text.gsub!(/\e[Hh]\[-1\]/) { "" }
  273.     text.gsub!(/\e[Hh]\[([0-9]+)\]/) { "" }
  274.     text.gsub!(/\e[Hh]/) { "" }
  275.     text.gsub!(/\e[Tt]\[-1\]/) { "" }
  276.     text.gsub!(/\e[Tt]\[-2\]/) { "" }
  277.     text.gsub!(/\e[Tt]\[-3\]/) { "" }
  278.     text.gsub!(/\e[Tt]\[([0-9]+)\]/) { "" }
  279.     text.gsub!(/\e[Tt]/) { "" }
  280.     # 制御文字処理
  281.     text.gsub!(/\e[Ss]\[([0-9]+)\]/i) { "" }
  282.     text.gsub!(/\e[Oo]\[([0-9]+)\]/i) { "" }
  283.     text.gsub!(/\elast_holder/i) { "" }
  284.     text.gsub!(/\elast_material/i) { "" }
  285.     #text.gsub!(/\eV/) { "" } #変数に置き換える。
  286.     #text.gsub!(/\eN/) { "" } #名前へ置き換える。
  287.     #text.gsub!(/\eP/) { "" } #名前へ置き換える。
  288.     #text.gsub!(/\eG/) { "" } #金額へ置き換える。
  289.     #text.gsub!(/\eC/) { "" }
  290.     text.gsub!(/\eB/) { "" }
  291.     text.gsub!(/\eD/) { "" }
  292.     if text =~ /\eI/
  293.       loop do
  294.         if str = text.sub!(/\eI\[(\d+)\]/){ "" }
  295.           add += 24
  296.         else
  297.           break
  298.         end
  299.       end
  300.     end
  301.     #text.gsub!(/\\n/) { "\n" }
  302.     text.sub!(/\ecenter/) {""}
  303.     text.sub!(/\eright/)  {""}
  304.     text.gsub!(/\ecenter/) {""}
  305.     text.gsub!(/\eright/) {""}

  306.     text = xrxsv2_convert_escape_characters(text)
  307.     basic_width = text_size(text).width + add
  308.     esc = text.scan(/\e(\S)/)
  309.     return ( basic_width - esc.size * (contents.font.size - 4) ) #\eの幅は20?
  310.   end
  311.   #--------------------------------------------------------------------------
  312.   # ● 最も長い列の長さを調べる。エスケープ文字は含まない。
  313.   #--------------------------------------------------------------------------
  314.   def max_width
  315.     text_size = []
  316.     for i in 0 ... @all_texts.size
  317.       text_size.push text_width_no_escape(@all_texts[i],@all_texts[i]) + 20
  318.     end
  319.     return text_size.max
  320.   end
  321.   #--------------------------------------------------------------------------
  322.   # ● 吹きだしテールが上か下の場合の画像を準備。
  323.   #--------------------------------------------------------------------------
  324.   def create_tail_up_under
  325.     skin = "Window"
  326.     tale_pos = get_tale_pos
  327.     case @position
  328.     when 0  # 上
  329.       @tail.bitmap = Cache.system(skin + "-top")
  330.       @tail.x = tale_pos[0]
  331.       @tail.y = tale_pos[1]
  332.       @tail.z = self.z + 1
  333.     when 1  # 中
  334.       @tail.dispose
  335.       @tail = nil
  336.     when 2  # 下
  337.       @tail.bitmap = Cache.system(skin + "-under")
  338.       @tail.x = tale_pos[0]
  339.       @tail.y = tale_pos[1]
  340.       @tail.z = self.z + 1
  341.     end
  342.   end
  343.   #--------------------------------------------------------------------------
  344.   # ● 全テキストの処理
  345.   #--------------------------------------------------------------------------
  346.   def process_all_text
  347.     #open_and_wait #リサイズがあるので、すぐにウィンドウをオープンしない。
  348.     text = convert_escape_characters($game_message.all_text)
  349.     pos = {}
  350.     new_page(text, pos)
  351.     process_character(text.slice!(0, 1), text, pos) until text.empty?
  352.   end
  353.   #--------------------------------------------------------------------------
  354.   # ● メッセージの更新 *
  355.   #--------------------------------------------------------------------------
  356.   def update_message
  357.     @wait_count = @type_wait
  358.     loop do
  359.       c = @text.slice!(/./m)
  360.       case update_message_type(c)
  361.       when 1
  362.         break
  363.       when 2
  364.         next
  365.       end
  366.       break unless @show_fast or @line_show_fast
  367.     end
  368.   end
  369.   ###SR###
  370.   alias window_message_update_show_fast_ams update_show_fast
  371.   def update_show_fast
  372.     @show_fast = true if Input.press?(:B)
  373.     window_message_update_show_fast_ams
  374.   end
  375.   
  376.   def input_pause
  377.     self.pause = true
  378.     wait(10)
  379.     Fiber.yield until Input.trigger?(:B) || Input.trigger?(:C) ||
  380.       Input.press?(:A)
  381.     Input.update
  382.     self.pause = false
  383.   end
  384.   ########
  385.   #--------------------------------------------------------------------------
  386.   # 一文字の描画 (返り値 1:break, 2:next)
  387.   #--------------------------------------------------------------------------
  388. #=begin
  389.   def process_escape_character(code, text, pos)
  390.     case code.upcase
  391.     when '感觉不是我那个,这个是我用的(我应该在主楼贴的TAT)
  392. 有没有办法修改我这个的?TAT
  393.       @gold_window.open
  394.     when '.'
  395.       wait(15)
  396.     when '|'
  397.       wait(60)
  398.     when '!'
  399.       input_pause
  400.     when '>'
  401.       @line_show_fast = true
  402.     when '<'
  403.       @line_show_fast = false
  404.     when '^'
  405.       @pause_skip = true
  406.     #when 'n'                      # 改行
  407.     #  new_line
  408.     #  max = MAX_LINE
  409.     #  max = 14 if self.pop_character != nil
  410.     #  if @line_count >= max      # 行数が最大のとき
  411.     #    unless @text.empty?           # さらに続きがあるなら
  412.     #      self.pause = true           # 入力待ちを入れる
  413.           #return 1
  414.     #    end
  415.     #  end
  416.     #when 'S'                       # \S[n]  (スピード変更)
  417.     #  text.sub!(/\[([0-9]+)\]/, "")
  418.     #  @type_wait = $1.to_i
  419.     #  return 2
  420.     when 'O'                       # \O 文字を透明にする。
  421.       text.sub!(/\[([0-9]+)\]/, "")
  422.       contents.font.color.alpha = $1.to_i
  423.       #return 2
  424.     when 'D' #\D 文字に影をつける
  425.       contents.font.shadow ^= true
  426.     #when '18'
  427.     #  name = ($game_temp.last_gain_holder.name rescue "")
  428.     #  update_message_type_draw_at(name)
  429.     #when '19'
  430.     #  item = ($game_temp.last_gain_material.item rescue nil)
  431.     #  draw_item_name(item, @contents_x, @contents_y)
  432.     #  @contents_x += 196
  433.     else
  434.       super
  435.     end

  436.   end
  437. #=end
  438.   #--------------------------------------------------------------------------
  439.   # ● 改ページ処理
  440.   #--------------------------------------------------------------------------
  441.   alias xrxsv2_new_page new_page
  442.   def new_page(text, pos)
  443.     xrxsv2_new_page(text, pos)
  444.     update_charpop_window
  445.   end
  446.   #--------------------------------------------------------------------------
  447.   # ● 改行位置の取得
  448.   #--------------------------------------------------------------------------
  449.   #def new_line_x
  450.   #  $game_message.face_name.empty? ? 0 : 112
  451.   #end
  452.   #--------------------------------------------------------------------------
  453.   # ● 改行処理
  454.   #--------------------------------------------------------------------------
  455.   alias xrxsv2_new_line_x new_line_x
  456.   def new_line
  457.     xrxsv2_new_line
  458.     set_align
  459.   end
  460.   #--------------------------------------------------------------------------
  461.   # 位置揃え
  462.   #--------------------------------------------------------------------------
  463.   def set_align
  464.     w = @line_widths[@line_count].to_i
  465.     a = @line_aligns[@line_count]
  466.     case a
  467.     when CENTER
  468.       @contents_x = @contents_x + ((contents.width - @contents_x) - w) / 2
  469.     when RIGHT
  470.       @contents_x = contents.width - w
  471.     end
  472.   end
  473.   #--------------------------------------------------------------------------
  474.   # ● ファイバーのメイン処理 ☆再定義
  475.   #--------------------------------------------------------------------------
  476.   def fiber_main
  477.     $game_message.visible = true
  478.     update_background
  479.     update_placement
  480.     loop do
  481.       process_all_text if $game_message.has_text?
  482.       process_input
  483.       $game_message.clear
  484.       @gold_window.close
  485.       process_hold #ホールドウィンドウの処理。
  486.       Fiber.yield
  487.       break unless text_continue?
  488.     end
  489.     close_and_wait
  490.     $game_message.visible = false
  491.     @fiber = nil
  492.   end
  493.   #--------------------------------------------------------------------------
  494.   # 定数
  495.   #--------------------------------------------------------------------------
  496.   AUTO   = 0
  497.   LEFT   = 1
  498.   CENTER = 2
  499.   RIGHT  = 3
  500. end
  501. #==============================================================================
  502. # アクティブイベント取得
  503. #==============================================================================
  504. class Game_Interpreter
  505.   attr_reader   :event_id
  506. end


  507. #==============================================================================
  508. # 各種機能の追加 - キャラポップ/ネーム/ホールド
  509. #==============================================================================
  510. class Window_Message < Window_Base
  511.   #--------------------------------------------------------------------------
  512.   # ● カーソルの更新 *
  513.   #--------------------------------------------------------------------------
  514.   def update_cursor
  515.     if @index >= 0
  516.       x = ($game_message.face_name.empty? ? 0 : 112)
  517.       y = ($game_message.choice_start + @index) * WLH - 1
  518.       w = contents.width - x
  519.       if self.pop_character != nil
  520.         x += 28
  521.         w -= 20
  522.       end
  523.       self.cursor_rect.set(x, y, w, WLH)
  524.     else
  525.       self.cursor_rect.empty
  526.     end
  527.   end
  528.   #--------------------------------------------------------------------------
  529.   # キャラクターの取得
  530.   #   parameter : パラメータ
  531.   #--------------------------------------------------------------------------
  532.   def get_character(parameter)
  533.     if parameter <= 0
  534.       $game_player
  535.     else
  536.       $game_map.events[parameter]
  537.     end
  538.   end
  539.   #--------------------------------------------------------------------------
  540.   # (メッセージ終了時)ホールドの処理
  541.   #--------------------------------------------------------------------------
  542.   def process_hold
  543.     if @window_hold
  544.       @held_windows.push(Window_Copy.new(self))
  545.       @held_windows.push(Window_Copy.new(@name_window))
  546.       @held_windows.push(Sprite_Copy.new(@name_sprite))
  547.       @held_windows.push(Sprite_Copy.new(@back_sprite))
  548.       for sprite in @extra_sprites
  549.         next if sprite.disposed?
  550.         @held_windows.push(Sprite_Copy.new(sprite))
  551.       end
  552.       @extra_sprites.clear
  553.       self.openness = 0
  554.       #@name_window.openness = 0
  555.       @back_sprite.visible = false
  556.     else
  557.       @held_windows.each {|object| object.dispose}
  558.       @held_windows.clear
  559.     end
  560.     #@name_window.close
  561.     #@name_sprite.visible = false
  562.   end
  563.   #--------------------------------------------------------------------------
  564.   # キャラポップ位置の設定と取得
  565.   #--------------------------------------------------------------------------
  566.   def pop_character=(character_id)
  567.     @pop_character = character_id
  568.   end
  569.   def pop_character
  570.     return @pop_character
  571.   end
  572.   #--------------------------------------------------------------------------
  573.   # キャラポップ時のウィンドウリサイズ
  574.   #--------------------------------------------------------------------------
  575.   def reszie_window_for_pop
  576.     #キャラポップ
  577.     if self.pop_character != nil
  578.       max_x = @line_widths.max.to_i
  579.       n  = max_x + 32
  580.       n += $game_message.face_name.empty? ? 0 : 122
  581.       m  = $game_message.face_name.empty? ? 0 : 96
  582.       w  = @name_sprite.bitmap.width
  583.       #self.width  = [n, w].max
  584.       self.width  = max_width
  585.       #self.height = [@lines_max * line_height, m].max + 32
  586.       self.height = [@all_texts.size * line_height, m].max + 32
  587.       create_contents
  588.       update_charpop_window
  589.     elsif @info_mode
  590.       @line_aligns[0] = CENTER
  591.       self.x = - 8
  592.       self.width = Graphics.width + 16
  593.       self.height = 56
  594.       create_contents
  595.     else
  596.       self.x = 0
  597.       self.width  = Graphics.width
  598.       self.height = MAX_LINE * line_height + 32
  599.       update_placement #位置情報修正。
  600.       create_contents
  601.     end
  602.   end
  603.   #--------------------------------------------------------------------------
  604.   # ● 背景スプライトの作成
  605.   #--------------------------------------------------------------------------
  606.   alias xrxsv2_create_back_sprite create_back_sprite
  607.   def create_back_sprite
  608.     xrxsv2_create_back_sprite
  609.     @back_sprite.zoom_x = 1.0 * Graphics.width / @back_sprite.bitmap.width
  610.     @name_window = Window_Base.new(0,0,112,36)
  611.     @name_window.visible = false
  612.     @name_sprite = Sprite.new
  613.     @name_sprite.bitmap = Bitmap.new(32,32)
  614.     @name_sprite.visible = false
  615.     self.x = self.x
  616.     self.y = self.y
  617.     self.z = self.z
  618.     @held_windows = []
  619.     @extra_sprites = []
  620.   end
  621.   #--------------------------------------------------------------------------
  622.   # ● 背景スプライトの解放
  623.   #--------------------------------------------------------------------------
  624.   alias xrxsv2_dispose_back_sprite dispose_back_sprite
  625.   def dispose_back_sprite
  626.     xrxsv2_dispose_back_sprite
  627.     @name_window.dispose if @name_window != nil #メニュー画面を出そうとするとエラー?
  628.     @name_sprite.dispose if @name_sprite != nil
  629.     for window in @held_windows
  630.       window.dispose
  631.     end
  632.   end
  633.   #--------------------------------------------------------------------------
  634.   # ● 背景スプライトの更新
  635.   #--------------------------------------------------------------------------
  636.   alias xrxsv2_update_back_sprite update_back_sprite
  637.   def update_back_sprite
  638.     @name_window.update
  639.     xrxsv2_update_back_sprite
  640.     update_charpop_window
  641.   end
  642.   #--------------------------------------------------------------------------
  643.   # ウィンドウの位置と不透明度の設定 (キャラポップ)
  644.   #--------------------------------------------------------------------------
  645.   def update_charpop_window
  646.     if self.pop_character
  647.       character = get_character(self.pop_character)
  648.       return if character == nil
  649.       # [X座標]
  650.       n = self.width / 2
  651.       n = [n, @name_skin.width + 16].max if @current_name != nil
  652.       w = @name_sprite.bitmap.width
  653.       x = character.screen_x - [[n, w].max, self.width - 32].min
  654.       # [Y座標]
  655.       if self.pop_character == 0 and POP_DIRECTION #イベントの方向を考慮。
  656.         if character.direction == 2 #下向き
  657.           @position = 0 #上にポップ
  658.         elsif character.direction == 8 #上向き
  659.           @position = 2 #下にポップ
  660.         end
  661.       end
  662.       case @position
  663.       when 0
  664.         y = character.screen_y - CHARPOP_HEIGHT - self.height
  665.       else
  666.         y = character.screen_y + 16
  667.       end
  668.       x_max = Graphics.width - 4 - self.width
  669.       x_min = 4
  670.       y_max = Graphics.height - self.height
  671.       y_min = 4
  672.       self.x = [[x, x_max].min, x_min].max
  673.       self.y = [[y, y_max].min, y_min].max
  674.     end
  675.   end
  676.   #--------------------------------------------------------------------------
  677.   # 位置の連動
  678.   #--------------------------------------------------------------------------
  679.   def x=(n)
  680.     super
  681.     if @name_window
  682.       @name_window.x = n + NAME_WINDOW_OFFSET_X
  683.       @name_sprite.x = n + NAME_WINDOW_OFFSET_X + 8
  684.     end
  685.   end
  686.   def y=(n)
  687.     super
  688.     if @name_window
  689.       @name_window.y = n + NAME_WINDOW_OFFSET_Y
  690.       @name_sprite.y = n + NAME_WINDOW_OFFSET_Y + 2
  691.     end
  692.   end
  693.   def z=(n)
  694.     super
  695.     if @name_window
  696.       @name_window.z = n + 11#1 テールの上に表示されるので、Zを水増しする。
  697.       @name_sprite.z = n + 12#2
  698.     end
  699.   end
  700.   #--------------------------------------------------------------------------
  701.   # ● ファイバーのメイン処理
  702.   #--------------------------------------------------------------------------
  703.   def fiber_main_namewin
  704.     fiber_main_namewin_default
  705.     @name_window.openness = 0
  706.     @name_sprite.bitmap.clear
  707.     $name = ""
  708.   end
  709.   alias :fiber_main_namewin_default :fiber_main
  710.   alias :fiber_main :fiber_main_namewin
  711. end
  712. #==============================================================================
  713. # 伸縮対応
  714. #==============================================================================
  715. class Window_Message < Window_Base
  716.   #--------------------------------------------------------------------------
  717.   # ● ウィンドウの背景と位置の設定 [再定義]
  718.   #--------------------------------------------------------------------------
  719.   def reset_window
  720.     @background = $game_message.background
  721.     @position = $game_message.position
  722.     if @background == 0   # 通常ウィンドウ
  723.       self.opacity = 255
  724.     else                  # 背景を暗くする、透明にする
  725.       self.opacity = 0
  726.     end
  727.     case @position
  728.     when 0  # 上
  729.       self.y = 0
  730.       @gold_window.y = 360
  731.     when 1  # 中
  732.       self.y = (Graphics.height - self.height) / 2
  733.       @gold_window.y = 0
  734.     when 2  # 下
  735.       self.y = Graphics.height - self.height
  736.       @gold_window.y = 0
  737.     end
  738.   end
  739. end
  740. #==============================================================================
  741. # □ Window_Copy
  742. #------------------------------------------------------------------------------
  743. #   指定のウィンドウのコピーを作成します。
  744. #==============================================================================
  745. class Window_Copy < Window_Base
  746.   #--------------------------------------------------------------------------
  747.   # ○ オブジェクト初期化
  748.   #--------------------------------------------------------------------------
  749.   def initialize(window)
  750.     super(window.x, window.y, window.width, window.height)
  751.     self.contents = window.contents.dup unless window.contents.nil?
  752.     self.opacity = window.opacity
  753.     self.back_opacity = window.back_opacity
  754.     self.z = window.z - 3
  755.     self.visible = window.visible
  756.   end
  757. end
  758. #==============================================================================
  759. # □ Sprite_Copy
  760. #------------------------------------------------------------------------------
  761. #   指定のスプライトのコピーを作成します。
  762. #==============================================================================
  763. class Sprite_Copy < Sprite
  764.   #--------------------------------------------------------------------------
  765.   # ○ オブジェクト初期化
  766.   #--------------------------------------------------------------------------
  767.   def initialize(sprite)
  768.     super()
  769.     self.bitmap = sprite.bitmap.dup unless sprite.bitmap.nil?
  770.     self.opacity = sprite.opacity
  771.     self.x = sprite.x
  772.     self.y = sprite.y
  773.     self.z = sprite.z - 3
  774.     self.ox = sprite.ox
  775.     self.oy = sprite.oy
  776.     self.zoom_x = sprite.zoom_x
  777.     self.visible = sprite.visible
  778.   end
  779. end



  780. #■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□
  781. #■吹きだしテールの表示ルーチン。
  782. #■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□
  783. #==============================================================================
  784. # +++ 「+ふきだし表示」VX +++
  785. # by パラ犬  [url]http://2d6.parasite.jp/[/url]
  786. #      ×
  787. #    row       [url]http://xms.rdy.jp/[/url]
  788. #
  789. # publish 2010/ 3/ 2
  790. # update  -
  791. #
  792. #------------------------------------------------------------------------------
  793. #    ほぼどんなメッセージウィンドウに対しても後付け可能な「ふきだし表示」です。
  794. #  また、テール部分のみの自動追尾機能を持ちます。
  795. #   ふきだし表示をするには、
  796. #  テール用画像「Window-top」「Window-under」を
  797. #  「Graphics/System」フォルダにインポートしておく必要があります。
  798. #==============================================================================
  799. # ■ Window_Message
  800. #==============================================================================
  801. class Window_Message < Window_Base
  802.   #--------------------------------------------------------------------------
  803.   # ● メッセージの開始
  804.   #--------------------------------------------------------------------------
  805.   alias parashelf_update_all_windows update_all_windows
  806.   def update_all_windows
  807.     parashelf_update_all_windows
  808.     update_tail
  809.   end
  810.   #--------------------------------------------------------------------------
  811.   # クローズ [オーバーライド]
  812.   #--------------------------------------------------------------------------
  813.   def close
  814.     super
  815.     del_tail
  816.     @name_window.close if @name_window != nil #ネームウィンドウのクローズ動作。
  817.   end
  818.   #--------------------------------------------------------------------------
  819.   # ● 背景スプライトの更新
  820.   #--------------------------------------------------------------------------
  821.   alias parashelf_update_back_sprite update_back_sprite
  822.   def update_back_sprite
  823.     parashelf_update_back_sprite
  824.     update_tail
  825.   end
  826.   #--------------------------------------------------------------------------
  827.   # ○ フレーム更新 (ふきだしテールの更新)
  828.   #--------------------------------------------------------------------------
  829.   def update_tail
  830.     # ふきだしモードではイベントの動きに追従
  831.     if $mes_id != nil and @tail != nil
  832.       tale_pos = get_tale_pos
  833.       @tail.x = tale_pos[0]
  834.       @tail.y = tale_pos[1]
  835.       update_tail_bitmap
  836.     end
  837.   end
  838.   ##--------------------------------------------------------------------------
  839.   # ○ ふきだしテールの画像を更新。
  840.   #--------------------------------------------------------------------------
  841.   def update_tail_bitmap
  842.     skin = "Window"
  843.     if $win_x != nil
  844.       if $win_x > 0
  845.         @tail.bitmap = Cache.system(skin + "-right")
  846.       elsif  $win_x < 0
  847.         @tail.bitmap = Cache.system(skin + "-left")
  848.       else
  849.         case @position
  850.         when 0  # 上
  851.           @tail.bitmap = Cache.system(skin + "-top")
  852.         when 2  # 下
  853.           @tail.bitmap = Cache.system(skin + "-under")
  854.         end
  855.       end
  856.     else
  857.       case @position
  858.       when 0  # 上
  859.         @tail.bitmap = Cache.system(skin + "-top")
  860.       when 2  # 下
  861.         @tail.bitmap = Cache.system(skin + "-under")
  862.       end
  863.     end
  864.     # 可視状態
  865.     if self.visible == true
  866.       @tail.visible = self.openness == 255
  867.     else
  868.       @tail.visible = false
  869.     end
  870.   end
  871.   #--------------------------------------------------------------------------
  872.   # ○ テールの位置を計算
  873.   #--------------------------------------------------------------------------
  874.   def get_tale_pos
  875.     if defined?($game_system.show_stand_picture) #A1立ち絵スクリプトを入れている。
  876.       if $game_system.show_stand_picture #立ち絵on
  877.         pos = get_tale_pos_stand_pic
  878.       else
  879.         pos = get_tale_pos_normal
  880.       end
  881.     else
  882.       pos = get_tale_pos_normal
  883.     end
  884.     return pos
  885.   end
  886.   #--------------------------------------------------------------------------
  887.   # ○ テールの位置を計算/立ち絵使用時。※NAME_CHANGEの編集必須。
  888.   #--------------------------------------------------------------------------
  889.   def get_tale_pos_stand_pic
  890.     if $game_message.face_name != ""  and @tail != nil
  891.       name = A1_System::StandPicture::NAME_CHANGE[$game_message.face_name]
  892.       chara = name[$game_message.face_index][0]
  893.       if @stand_pic[chara] != nil #立ち絵無しの場合通常通り。
  894.         x = @stand_pic[chara].pic_sprite.x + @stand_pic[chara].pic_sprite.width / 2
  895.         y = get_tale_pos_normal_updown
  896.         update_tail_bitmap
  897.       else
  898.         return get_tale_pos_normal #立ち絵が見つからない場合は通常通り。
  899.       end
  900.     else
  901.       return get_tale_pos_normal #立ち絵が見つからない場合は通常通り。
  902.     end
  903.     return [x,y]
  904.   end
  905.   #--------------------------------------------------------------------------
  906.   # ○ テールの位置を計算/立ち絵未使用時。
  907.   #--------------------------------------------------------------------------
  908.   def get_tale_pos_normal
  909.     if $mes_id == (-2) #左右の場合は高さはウィンドウ中心。上下ならやや左に配置。
  910.       if $win_x != nil
  911.         if $win_x > 0
  912.           x = $win_x - @tail.width / 2
  913.           y = self.y + self.height / 2 - @tail.height / 2
  914.         elsif $win_x < 0
  915.           x = self.width - @tail.width / 2
  916.           y = self.y + self.height / 2 - @tail.height / 2
  917.         else
  918.           x = MINAS_TWE_X_POS
  919.           y = get_tale_pos_normal_updown
  920.         end
  921.       else
  922.         x = MINAS_TWE_X_POS
  923.         y = get_tale_pos_normal_updown
  924.       end
  925.     elsif $mes_id <= (-3) #左右の場合は高さはウィンドウ中心。上下ならやや左に配置。
  926.       if $win_x != nil
  927.         if $win_x > 0
  928.           x = $win_x - @tail.width / 2
  929.           y = self.y + self.height / 2
  930.         elsif $win_x < 0
  931.           x = self.width - @tail.width / 2
  932.           y = self.y + self.height / 2
  933.         else
  934.           x = MINAS_THREE_X_POS
  935.           y = get_tale_pos_normal_updown
  936.         end
  937.       else
  938.         x = MINAS_THREE_X_POS
  939.         y = get_tale_pos_normal_updown
  940.       end
  941.     else
  942.       character = get_character($mes_id)
  943.       #msgbox $mes_id
  944.       x = [[character.screen_x - 16, self.x].max, self.x + self.width - 32].min
  945.       if $win_x != nil
  946.         if $win_x > 0
  947.           x = $win_x - @tail.width / 2
  948.           y = character.screen_y
  949.         elsif $win_x < 0
  950.           x = self.width
  951.           y = character.screen_y
  952.         else
  953.           y = get_tale_pos_normal_updown
  954.         end
  955.       else
  956.         y = get_tale_pos_normal_updown
  957.       end
  958.     end
  959.     return [x, y]
  960.   end
  961.   #--------------------------------------------------------------------------
  962.   # ○ テールが上下の時、かつ[-2][-3]でない時のy座標の取得。
  963.   #--------------------------------------------------------------------------
  964.   def get_tale_pos_normal_updown
  965.     case @position
  966.     when 0
  967.       y = self.y + self.height - @tail.height / 2
  968.     else
  969.       y = self.y - @tail.height / 2
  970.     end
  971.     return y
  972.   end
  973.   #--------------------------------------------------------------------------
  974.   # ○ ふきだしを破棄
  975.   #--------------------------------------------------------------------------
  976.   def del_tail
  977.     if @tail != nil
  978.       @tail.dispose
  979.       @tail = nil
  980.     end
  981.   end
  982. end
  983. #
  984. # ▼▲▼ XRXS 9拡張CO-X. ふきだし自動設定 ▼▲▼
  985. #==============================================================================
  986. # ■ Window_Message
  987. #==============================================================================
  988. class Window_Message < Window_Base
  989.   #--------------------------------------------------------------------------
  990.   # ○ ポップキャラクターの設定
  991.   #--------------------------------------------------------------------------
  992.   def pop_character=(character_id)
  993.     @pop_character = character_id
  994.     $mes_id = character_id
  995.   end
  996.   #--------------------------------------------------------------------------
  997.   # ○ テールキャラクターの設定
  998.   #--------------------------------------------------------------------------
  999.   def tail_character=(character_id)
  1000.     #@pop_character = character_id
  1001.     $mes_id = character_id
  1002.   end
  1003. end

  1004. #==============================================================================
  1005. # ■ Scene_Menu
  1006. #------------------------------------------------------------------------------
  1007. #  メニューを開いてからウィンドウが出るとネームウィンドウが表示される不具合修正。
  1008. #==============================================================================
  1009. #class Scene_Menu < Scene_MenuBase
  1010. #  def terminate_hukidasi_menyu
  1011. #    @name_window.openness = 0 if @name_window != nil
  1012. #    terminate_hukidasi_menyu_default
  1013. #  end
  1014. #  alias :terminate_hukidasi_menyu_default :terminate
  1015. #  alias :terminate :terminate_hukidasi_menyu
  1016. #end

  1017. #■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□
  1018. #■ウィンドウ非表示ルーチン
  1019. #■吹きだしテールとネームウィンドウに対応。
  1020. #■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□
  1021. #==============================================================================
  1022. # L(キーボードのQ)を押すと、メッセージウィンドウを表示?非表示
  1023. #==============================================================================
  1024. class Window_Message < Window_Base
  1025.   def update_winoff
  1026.     unless $game_party.in_battle #バトル中は無効。
  1027.       if Input.trigger?(Input::L)
  1028.         if self.visible == true
  1029.           self.visible = false
  1030.           @tail.visible = false if @tail != nil
  1031.         else
  1032.           self.visible = true
  1033.         end
  1034.         if @name_window != nil
  1035.           if @name_window.visible == false and $name != nil and $name != ""
  1036.             @name_window.visible = true
  1037.             @name_sprite.visible = true
  1038.           else
  1039.             @name_window.visible = false
  1040.             @name_sprite.visible = false
  1041.           end
  1042.         end
  1043.       elsif Input.trigger?(Input::C) or Input.trigger?(Input::B)
  1044.         self.visible = true if self.visible == false
  1045.         @tail.visible = true if @tail != nil and @tail.visible == false
  1046.         if @name_window != nil and $name != nil
  1047.           if $name != ""
  1048.             @name_window.visible = true
  1049.             @name_sprite.visible = true
  1050.           end
  1051.         end
  1052.       end
  1053.     end
  1054.     update_winoff_default
  1055.   end
  1056.   alias :update_winoff_default :update
  1057.   alias :update :update_winoff
  1058. end


  1059. #■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□
  1060. #■ウィンドウ表示位置指定ルーチン
  1061. #■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□■□
  1062. #===========================================================================
  1063. #イベントコマンド「スクリプト」を使い、
  1064. #$win_x=100 
  1065. #$win_y=100
  1066. #と入力すれば、ウィンドウを(100、100)の位置に表示します。
  1067. #使わない時は
  1068. #$win_x=nil
  1069. #などとnilを入力しておいてください。
  1070. #===========================================================================
  1071. class Window_Message < Window_Base
  1072.   #--------------------------------------------------------------------------
  1073.   # ● ウィンドウの背景と位置の設定 [再定義]
  1074.   #--------------------------------------------------------------------------
  1075.   def update_placement_position
  1076.     update_placement_position_default
  1077.     if $win_x != nil
  1078.       if $win_x > 0
  1079.         self.x = $win_x
  1080.         self.width -= $win_x
  1081.       else
  1082.         self.x = 0
  1083.         self.width += $win_x
  1084.       end
  1085.     end
  1086.     if $win_y != nil
  1087.       self.y = $win_y
  1088.     end
  1089.   end
  1090.   alias_method :update_placement_position_default, :update_placement
  1091.   alias_method :update_placement, :update_placement_position
  1092. end


  1093. #==============================================================================
  1094. # ■ SceneManager
  1095. #------------------------------------------------------------------------------
  1096. #  シーン遷移のさい、テールを破棄する。
  1097. #==============================================================================
  1098. module SceneManager
  1099.   #--------------------------------------------------------------------------
  1100.   # ● 呼び出し
  1101.   #--------------------------------------------------------------------------
  1102.   def self.call_sceman_hukidasi(scene_class)
  1103.     if defined?(self.scene.message_window)
  1104.       self.scene.message_window.del_tail if self.scene.message_window.tail != nil
  1105.     end
  1106.     @stack.push(@scene)
  1107.     [url=home.php?mod=space&uid=420706]@Scene[/url] = scene_class.new
  1108.   end
  1109.   #--------------------------------------------------------------------------
  1110.   # ● クラスメソッドのエイリアス
  1111.   #--------------------------------------------------------------------------
  1112.   class << self
  1113.     alias :call_sceman_hukidasi_default :call
  1114.     alias :call :call_sceman_hukidasi
  1115.   end
  1116. end

  1117. #==============================================================================
  1118. # ■ Scene_Map
  1119. #------------------------------------------------------------------------------
  1120. #  戦闘トランジションのさい、テールを破棄。
  1121. #==============================================================================
  1122. class Scene_Map < Scene_Base
  1123.   attr_accessor :message_window
  1124.   #--------------------------------------------------------------------------
  1125.   # ● 戦闘前トランジション実行
  1126.   #--------------------------------------------------------------------------
  1127.   def perform_battle_transition_hukidasi
  1128.     @message_window.del_tail #テールの破棄
  1129.     perform_battle_transition_hukidasi_default
  1130.   end
  1131.   alias_method :perform_battle_transition_hukidasi_default, :perform_battle_transition
  1132.   alias_method :perform_battle_transition, :perform_battle_transition_hukidasi
  1133. end
复制代码
感觉不是我那个,这个是我用的(我应该在主楼贴的TAT)
有没有办法修改我这个的?TAT

点评

请看下一楼  发表于 2014-8-25 19:44
我说的是楼上你发的这个脚本。你原来范例里的我已经改好在楼上了 =。=  发表于 2014-8-25 19:35
我甜美地教你了啊。改self.width 和 self.height的值有难度?  发表于 2014-8-25 19:34
而且你帮我修改的那个脚本没有600行啊  发表于 2014-8-25 19:34
我看不懂((‵□′))  发表于 2014-8-25 19:31
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
5
星屑
1823
在线时间
339 小时
注册时间
2014-4-1
帖子
270
5
 楼主| 发表于 2014-8-25 19:44:27 | 只看该作者
遮挡就是这个啊 红圈圈起来的那个黑线我想去掉啊,意思就是想让箭头在对话窗口的上方

点评

素材在楼下  发表于 2014-8-25 19:54
话说,我看了一下脚本的这段。@tail.z = self.z + 1 它的 Z 值已经比对话框高了。我觉得你得检查一下素材的问题。看看这条线是不是再素材上  发表于 2014-8-25 19:52
怎么修改  发表于 2014-8-25 19:50
修改它的 Z 值啊。  发表于 2014-8-25 19:49
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
5
星屑
1823
在线时间
339 小时
注册时间
2014-4-1
帖子
270
6
 楼主| 发表于 2014-8-25 19:54:07 | 只看该作者
素材是这样的

点评

涂色的地方已经遮到对话框了  发表于 2014-8-25 19:58
那你直接改素材就行了呗。大概是因为这个素材刚刚好衔接到对话框底部,并没有遮到对话框。  发表于 2014-8-25 19:57
回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

无限の剣制

梦石
0
星屑
10014
在线时间
5019 小时
注册时间
2013-2-28
帖子
5030

开拓者贵宾

7
发表于 2014-8-25 20:03:36 | 只看该作者
funxlww 发表于 2014-8-25 19:54
素材是这样的


我随便拿你原来的范例里的图片试了一下,这个素材的确是在对话框上方的。
自己看。

点评

下一楼  发表于 2014-8-25 20:14
改素材啊,你真的确定上面你的截图有遮到?我怎么觉得是刚刚好衔接到窗口的 =。=  发表于 2014-8-25 20:07
那要怎么破  发表于 2014-8-25 20:04
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
5
星屑
1823
在线时间
339 小时
注册时间
2014-4-1
帖子
270
8
 楼主| 发表于 2014-8-25 20:14:15 | 只看该作者
在游戏里是这样的 在ps的上是这样的 已经到最上面了
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-2-23 01:48

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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