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

Project1

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

[已经解决] 将对话框背景改成自定义图片的脚本?

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
72 小时
注册时间
2008-10-27
帖子
70
跳转到指定楼层
1
发表于 2012-1-15 17:44:06 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
就是不用Windowskins,而是垫一张Pictures作为底图
常看到有人说每说一句话就显示一次图片这个方法,但这实在太不经济实惠
有没有高人有办法只改Window_Message就做出来呢?或者是有没有做得出这种效果的脚本呢?拜托了!

Lv2.观梦者

梦石
0
星屑
777
在线时间
1270 小时
注册时间
2011-2-14
帖子
5589
2
发表于 2012-1-15 18:21:29 | 只看该作者
本帖最后由 R-零 于 2012-1-15 18:22 编辑

从默认改过来的,原来的窗口皮肤替换为空位图文件,将那张你要的底图放在窗口皮肤文件夹下
  1. #==============================================================================
  2. # ■ Window_Message
  3. #------------------------------------------------------------------------------
  4. #  显示文章的信息窗口。
  5. #==============================================================================

  6. NAME10921382739847320909123821098302948322179317493 =
  7. # R-零 : 下面填写你的文件名
  8. "火焰粒子-3.png"


  9. class Window_Message < Window_Selectable
  10.   #--------------------------------------------------------------------------
  11.   # ● 初始化状态
  12.   #--------------------------------------------------------------------------
  13.   def initialize
  14.     super(80, 304, 480, 160)
  15.     self.contents = Bitmap.new("Graphics/Windowskins/"+NAME10921382739847320909123821098302948322179317493)
  16.     self.visible = false
  17.     self.z = 9998
  18.     @fade_in = false
  19.     @fade_out = false
  20.     @contents_showing = false
  21.     @cursor_width = 0
  22.     self.active = false
  23.     self.index = -1
  24.   end
  25.   #--------------------------------------------------------------------------
  26.   # ● 释放
  27.   #--------------------------------------------------------------------------
  28.   def dispose
  29.     terminate_message
  30.     $game_temp.message_window_showing = false
  31.     if @input_number_window != nil
  32.       @input_number_window.dispose
  33.     end
  34.     super
  35.   end
  36.   #--------------------------------------------------------------------------
  37.   # ● 处理信息结束
  38.   #--------------------------------------------------------------------------
  39.   def terminate_message
  40.     self.active = false
  41.     self.pause = false
  42.     self.index = -1
  43.     self.contents.clear
  44.     # 清除显示中标志
  45.     @contents_showing = false
  46.     # 呼叫信息调用
  47.     if $game_temp.message_proc != nil
  48.       $game_temp.message_proc.call
  49.     end
  50.     # 清除文章、选择项、输入数值的相关变量
  51.     $game_temp.message_text = nil
  52.     $game_temp.message_proc = nil
  53.     $game_temp.choice_start = 99
  54.     $game_temp.choice_max = 0
  55.     $game_temp.choice_cancel_type = 0
  56.     $game_temp.choice_proc = nil
  57.     $game_temp.num_input_start = 99
  58.     $game_temp.num_input_variable_id = 0
  59.     $game_temp.num_input_digits_max = 0
  60.     # 开放金钱窗口
  61.     if @gold_window != nil
  62.       @gold_window.dispose
  63.       @gold_window = nil
  64.     end
  65.   end
  66.   #--------------------------------------------------------------------------
  67.   # ● 刷新
  68.   #--------------------------------------------------------------------------
  69.   def refresh
  70.     self.contents.clear
  71.     self.contents = Bitmap.new("Graphics/Windowskins/"+NAME10921382739847320909123821098302948322179317493)
  72.     self.contents.font.color = normal_color
  73.     x = y = 0
  74.     @cursor_width = 0
  75.     # 到选择项的下一行字
  76.     if $game_temp.choice_start == 0
  77.       x = 8
  78.     end
  79.     # 有等待显示的文字的情况下
  80.     if $game_temp.message_text != nil
  81.       text = $game_temp.message_text
  82.       # 限制文字处理
  83.       begin
  84.         last_text = text.clone
  85.         text.gsub!(/\\[Vv]\[([0-9]+)\]/) { $game_variables[$1.to_i] }
  86.       end until text == last_text
  87.       text.gsub!(/\\[Nn]\[([0-9]+)\]/) do
  88.         $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""
  89.       end
  90.       # 为了方便、将 "\\\\" 变换为 "\000"
  91.       text.gsub!(/\\\\/) { "\000" }
  92.       # "\\C" 变为 "\001" 、"\\G" 变为 "\002"
  93.       text.gsub!(/\\[Cc]\[([0-9]+)\]/) { "\001[#{$1}]" }
  94.       text.gsub!(/\\[Gg]/) { "\002" }
  95.       # c 获取 1 个字 (如果不能取得文字就循环)
  96.       while ((c = text.slice!(/./m)) != nil)
  97.         # \\ 的情况下
  98.         if c == "\000"
  99.           # 还原为本来的文字
  100.           c = "\\"
  101.         end
  102.         # \C[n] 的情况下
  103.         if c == "\001"
  104.           # 更改文字色
  105.           text.sub!(/\[([0-9]+)\]/, "")
  106.           color = $1.to_i
  107.           if color >= 0 and color <= 7
  108.             self.contents.font.color = text_color(color)
  109.           end
  110.           # 下面的文字
  111.           next
  112.         end
  113.         # \G 的情况下
  114.         if c == "\002"
  115.           # 生成金钱窗口
  116.           if @gold_window == nil
  117.             @gold_window = Window_Gold.new
  118.             @gold_window.x = 560 - @gold_window.width
  119.             if $game_temp.in_battle
  120.               @gold_window.y = 192
  121.             else
  122.               @gold_window.y = self.y >= 128 ? 32 : 384
  123.             end
  124.             @gold_window.opacity = self.opacity
  125.             @gold_window.back_opacity = self.back_opacity
  126.           end
  127.           # 下面的文字
  128.           next
  129.         end
  130.         # 另起一行文字的情况下
  131.         if c == "\n"
  132.           # 刷新选择项及光标的高
  133.           if y >= $game_temp.choice_start
  134.             @cursor_width = [@cursor_width, x].max
  135.           end
  136.           # y 加 1
  137.           y += 1
  138.           x = 0
  139.           # 移动到选择项的下一行
  140.           if y >= $game_temp.choice_start
  141.             x = 8
  142.           end
  143.           # 下面的文字
  144.           next
  145.         end
  146.         # 描绘文字
  147.         self.contents.draw_text(4 + x, 32 * y, 40, 32, c)
  148.         # x 为要描绘文字的加法运算
  149.         x += self.contents.text_size(c).width
  150.       end
  151.     end
  152.     # 选择项的情况
  153.     if $game_temp.choice_max > 0
  154.       @item_max = $game_temp.choice_max
  155.       self.active = true
  156.       self.index = 0
  157.     end
  158.     # 输入数值的情况
  159.     if $game_temp.num_input_variable_id > 0
  160.       digits_max = $game_temp.num_input_digits_max
  161.       number = $game_variables[$game_temp.num_input_variable_id]
  162.       @input_number_window = Window_InputNumber.new(digits_max)
  163.       @input_number_window.number = number
  164.       @input_number_window.x = self.x + 8
  165.       @input_number_window.y = self.y + $game_temp.num_input_start * 32
  166.     end
  167.   end
  168.   #--------------------------------------------------------------------------
  169.   # ● 设置窗口位置与不透明度
  170.   #--------------------------------------------------------------------------
  171.   def reset_window
  172.     if $game_temp.in_battle
  173.       self.y = 16
  174.     else
  175.       case $game_system.message_position
  176.       when 0  # 上
  177.         self.y = 16
  178.       when 1  # 中
  179.         self.y = 160
  180.       when 2  # 下
  181.         self.y = 304
  182.       end
  183.     end
  184.     if $game_system.message_frame == 0
  185.       self.opacity = 255
  186.     else
  187.       self.opacity = 0
  188.     end
  189.     self.back_opacity = 160
  190.   end
  191.   #--------------------------------------------------------------------------
  192.   # ● 刷新画面
  193.   #--------------------------------------------------------------------------
  194.   def update
  195.     super
  196.     # 渐变的情况下
  197.     if @fade_in
  198.       self.contents_opacity += 24
  199.       if @input_number_window != nil
  200.         @input_number_window.contents_opacity += 24
  201.       end
  202.       if self.contents_opacity == 255
  203.         @fade_in = false
  204.       end
  205.       return
  206.     end
  207.     # 输入数值的情况下
  208.     if @input_number_window != nil
  209.       @input_number_window.update
  210.       # 确定
  211.       if Input.trigger?(Input::C)
  212.         $game_system.se_play($data_system.decision_se)
  213.         $game_variables[$game_temp.num_input_variable_id] =
  214.           @input_number_window.number
  215.         $game_map.need_refresh = true
  216.         # 释放输入数值窗口
  217.         @input_number_window.dispose
  218.         @input_number_window = nil
  219.         terminate_message
  220.       end
  221.       return
  222.     end
  223.     # 显示信息中的情况下
  224.     if @contents_showing
  225.       # 如果不是在显示选择项中就显示暂停标志
  226.       if $game_temp.choice_max == 0
  227.         self.pause = true
  228.       end
  229.       # 取消
  230.       if Input.trigger?(Input::B)
  231.         if $game_temp.choice_max > 0 and $game_temp.choice_cancel_type > 0
  232.           $game_system.se_play($data_system.cancel_se)
  233.           $game_temp.choice_proc.call($game_temp.choice_cancel_type - 1)
  234.           terminate_message
  235.         end
  236.       end
  237.       # 确定
  238.       if Input.trigger?(Input::C)
  239.         if $game_temp.choice_max > 0
  240.           $game_system.se_play($data_system.decision_se)
  241.           $game_temp.choice_proc.call(self.index)
  242.         end
  243.         terminate_message
  244.       end
  245.       return
  246.     end
  247.     # 在渐变以外的状态下有等待显示的信息与选择项的场合
  248.     if @fade_out == false and $game_temp.message_text != nil
  249.       @contents_showing = true
  250.       $game_temp.message_window_showing = true
  251.       reset_window
  252.       refresh
  253.       Graphics.frame_reset
  254.       self.visible = true
  255.       self.contents_opacity = 0
  256.       if @input_number_window != nil
  257.         @input_number_window.contents_opacity = 0
  258.       end
  259.       @fade_in = true
  260.       return
  261.     end
  262.     # 没有可以显示的信息、但是窗口为可见的情况下
  263.     if self.visible
  264.       @fade_out = true
  265.       self.opacity -= 48
  266.       if self.opacity == 0
  267.         self.visible = false
  268.         @fade_out = false
  269.         $game_temp.message_window_showing = false
  270.       end
  271.       return
  272.     end
  273.   end
  274.   #--------------------------------------------------------------------------
  275.   # ● 刷新光标矩形
  276.   #--------------------------------------------------------------------------
  277.   def update_cursor_rect
  278.     if @index >= 0
  279.       n = $game_temp.choice_start + @index
  280.       self.cursor_rect.set(8, n * 32, @cursor_width, 32)
  281.     else
  282.       self.cursor_rect.empty
  283.     end
  284.   end
  285. end
复制代码
回复

使用道具 举报

Lv1.梦旅人

派大星

梦石
0
星屑
195
在线时间
2133 小时
注册时间
2011-9-18
帖子
2652
3
发表于 2012-1-15 18:32:29 | 只看该作者
本帖最后由 无双sxa 于 2012-1-15 18:38 编辑

可以用事件,更改窗口外观,把自己用的图放在windowskins里。
使用的图,非标准窗口
用图之前
用图之后

点评

IRO
谢谢,但这样不美观啦~|||  发表于 2012-1-15 18:58
没办法,我是事件党,没法拿出脚本,只好胡思乱想了。  发表于 2012-1-15 18:49

评分

参与人数 1星屑 +2 收起 理由
R-零 + 2 太有创意了……

查看全部评分

回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
72 小时
注册时间
2008-10-27
帖子
70
4
 楼主| 发表于 2012-1-15 18:52:11 | 只看该作者
R-零 发表于 2012-1-15 18:21
从默认改过来的,原来的窗口皮肤替换为空位图文件,将那张你要的底图放在窗口皮肤文件夹下 ...

谢谢你!
但是用了一下,发现每段一句话视窗就会淡出淡入一次
我希望可以不要间段,请问该怎么改呢?是"渐变"那里吗?
回复

使用道具 举报

Lv2.观梦者

梦石
0
星屑
777
在线时间
1270 小时
注册时间
2011-2-14
帖子
5589
5
发表于 2012-1-15 18:53:28 | 只看该作者
IRO 发表于 2012-1-15 18:52
谢谢你!
但是用了一下,发现每段一句话视窗就会淡出淡入一次
我希望可以不要间段,请问该怎么改呢?是"渐变" ...

不是,哪个是对话框本身效果,如果需要本人可以帮你改掉,只要你回个话就行

点评

IRO
可是默认是连续的呢...那还是这样好了,谢谢你了!  发表于 2012-1-15 19:20
制作过程中调用脚本来独立控制图像,这跟你之前的显示图片一样。因为RM不能自动判断连续的对话  发表于 2012-1-15 19:02
IRO
手动控制是指...?  发表于 2012-1-15 18:59
不过这样的话对话框的出现都得手动控制  发表于 2012-1-15 18:54
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-24 15:01

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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