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

Project1

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

[RMVA发布] 对话框优化一点的小脚本

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
19 小时
注册时间
2013-7-21
帖子
18
跳转到指定楼层
1
发表于 2013-7-26 09:48:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
希望对大家有一点点的帮助。
  1. #encoding:utf-8
  2. #==============================================================================
  3. # ■ Message_Advanced
  4. #------------------------------------------------------------------------------
  5. #   使对话框略微美观一点
  6. #   调用方式:在对话内容的第一行输入“l/r”+“对话者姓名”
  7. #   l和r表示头像在左边或者右边显示,对话者姓名显示在头像下方
  8. #   第一行输入“no”则为取消使用
  9. #==============================================================================

  10. class Game_Message
  11.   #--------------------------------------------------------------------------
  12.   # ● 定义实例变量
  13.   #--------------------------------------------------------------------------
  14.   attr_reader   :talker_name              # 说话者姓名
  15.   attr_reader   :talker_mirror            # 是否镜象显示
  16.   #--------------------------------------------------------------------------
  17.   # ● 清除
  18.   #--------------------------------------------------------------------------
  19.   def clear
  20.     @texts = []
  21.     @choices = []
  22.     # 初始化
  23.     @talker_name = ""
  24.     @talker_mirror = false
  25.     @face_name = ""
  26.     @face_index = 0
  27.     @background = 0
  28.     @position = 2
  29.     @choice_cancel_type = 0
  30.     @choice_proc = nil
  31.     @num_input_variable_id = 0
  32.     @num_input_digits_max = 0
  33.     @item_choice_variable_id = 0
  34.     @scroll_mode = false
  35.     @scroll_speed = 2
  36.     @scroll_no_fast = false
  37.   end
  38.   #--------------------------------------------------------------------------
  39.   # ● 获取包括换行符的所有内容
  40.   #--------------------------------------------------------------------------
  41.   def all_text
  42.     # 当不取消时执行处理
  43.     if @texts[0] != "no"
  44.       # 当输入的内容包含说话者姓名时
  45.       if @texts.size > 1
  46.         # 取出第一个字符
  47.         ch = @texts[0].slice!(0, 1)
  48.         # 当右侧显示头像时设置mirror标志
  49.         @talker_mirror = true if ch == "r"
  50.         @talker_name = "[" + @texts[0] + "]"
  51.       # 当输入的内容不包含说话者姓名时
  52.       else
  53.         @talker_name = "未定义"
  54.       end
  55.     end
  56.     # 删除第一行控制内容
  57.     @texts.delete_at(0)
  58.     @texts.inject("") {|r, text| r += text + "\n" }
  59.   end
  60. end

  61. class Window_Message < Window_Base
  62.   #--------------------------------------------------------------------------
  63.   # ● 处理纤程的主逻辑
  64.   #--------------------------------------------------------------------------
  65.   def fiber_main
  66.     $game_message.visible = true
  67.     update_background
  68.     update_placement
  69.     loop do
  70.       # 生成显示精灵
  71.       @face_sprite = Sprite.new
  72.       @name_sprite = Sprite.new
  73.       process_all_text if $game_message.has_text?
  74.       process_input
  75.       # 将显示精灵释放
  76.       @face_sprite.dispose
  77.       @name_sprite.dispose
  78.       $game_message.clear
  79.       @gold_window.close
  80.       Fiber.yield
  81.       break unless text_continue?
  82.     end
  83.     close_and_wait
  84.     $game_message.visible = false
  85.     @fiber = nil
  86.   end
  87.   #--------------------------------------------------------------------------
  88.   # ● 翻页处理
  89.   #--------------------------------------------------------------------------
  90.   def new_page(text, pos)
  91.     contents.clear
  92.     if !$game_message.talker_name.empty?
  93.       # 判断左右侧显示
  94.       if $game_message.talker_mirror      
  95.         draw_face_right($game_message.face_name,$game_message.face_index)
  96.         draw_name_right($game_message.talker_name)
  97.       else
  98.         draw_face_left($game_message.face_name,$game_message.face_index)
  99.         draw_name_left($game_message.talker_name)
  100.       end
  101.     else
  102.       draw_face($game_message.face_name, $game_message.face_index, 0, 0)
  103.     end
  104.     reset_font_settings
  105.     pos[:x] = new_line_x
  106.     pos[:y] = 0
  107.     pos[:new_x] = new_line_x
  108.     pos[:height] = calc_line_height(text)
  109.     clear_flags
  110.   end
  111.   #--------------------------------------------------------------------------
  112.   # ● 显示说话者脸图(左)
  113.   #--------------------------------------------------------------------------
  114.   def draw_face_left(face_name, face_index)
  115.     # 取出图片
  116.     source = Cache.face(face_name)
  117.     # 找到脸图位置
  118.     rect = Rect.new(face_index % 4 * 96, face_index / 4 * 96, 96, 96)
  119.     bitmap = Bitmap.new(96, 96)
  120.     # 复制到bitmap中
  121.     bitmap.blt(0, 0, source, rect)
  122.     # 计算精灵位置并显示
  123.     @face_sprite.x = standard_padding
  124.     @face_sprite.y = Graphics.height - 96 - standard_padding - line_height
  125.     @face_sprite.z = 1000
  126.     @face_sprite.bitmap = bitmap
  127.   end
  128.   #--------------------------------------------------------------------------
  129.   # ● 显示说话者脸图(右)
  130.   #--------------------------------------------------------------------------
  131.   def draw_face_right(face_name, face_index)
  132.     source = Cache.face(face_name)
  133.     rect = Rect.new(face_index % 4 * 96, face_index / 4 * 96, 96, 96)
  134.     bitmap = Bitmap.new(96, 96)
  135.     bitmap.blt(0, 0, source, rect)
  136.     @face_sprite.x = Graphics.width - 96 - standard_padding
  137.     @face_sprite.y = Graphics.height - 96 - standard_padding - line_height
  138.     @face_sprite.z = 1000
  139.     # 设置为右侧显示
  140.     @face_sprite.mirror = true
  141.     @face_sprite.bitmap = bitmap
  142.   end
  143.   #--------------------------------------------------------------------------
  144.   # ● 显示说话者姓名图(左)
  145.   #--------------------------------------------------------------------------
  146.   def draw_name_left(talker_name)
  147.     bitmap = Bitmap.new(96, line_height)
  148.     # 描绘姓名图像
  149.     bitmap.draw_text(bitmap.rect, talker_name, 1)
  150.     # 计算精灵位置并显示
  151.     @name_sprite.x = standard_padding
  152.     @name_sprite.y = Graphics.height - standard_padding - line_height
  153.     @name_sprite.z = 1000
  154.     @name_sprite.bitmap = bitmap
  155.   end
  156.   #--------------------------------------------------------------------------
  157.   # ● 显示说话者姓名图(右)
  158.   #--------------------------------------------------------------------------
  159.   def draw_name_right(talker_name)
  160.     bitmap = Bitmap.new(96, line_height)
  161.     bitmap.draw_text(bitmap.rect, talker_name, 1)
  162.     @name_sprite.x = Graphics.width - 96 - standard_padding
  163.     @name_sprite.y = Graphics.height - standard_padding - line_height
  164.     @name_sprite.z = 1000
  165.     @name_sprite.bitmap = bitmap
  166.   end
  167.   #--------------------------------------------------------------------------
  168.   # ● 获取换行位置
  169.   #--------------------------------------------------------------------------
  170.   def new_line_x
  171.     if !$game_message.talker_mirror
  172.       return $game_message.face_name.empty? ? 0 : 112
  173.     # 右侧显示时,换行显示位置为行首
  174.     else
  175.       return 0
  176.     end
  177.   end
  178. end
复制代码

Lv1.梦旅人

梦石
0
星屑
48
在线时间
161 小时
注册时间
2012-8-2
帖子
118
2
发表于 2013-7-26 11:00:51 | 只看该作者
无图无真相{:2_270:}

点评

同感  发表于 2013-9-8 17:48
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
28 小时
注册时间
2013-9-7
帖子
12
3
发表于 2013-9-7 20:24:20 | 只看该作者
有个严重的BUG啊,每次对话后,再次重复对话时名字就缩短了一个字节!
什么情况,求解决!

点评

还是同感  发表于 2013-9-8 17:48
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
70
在线时间
19 小时
注册时间
2006-12-27
帖子
30
4
发表于 2013-9-13 09:09:33 | 只看该作者
咋没有效果图呢
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-15 10:21

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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