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

Project1

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

[已经解决] 再问两个脚本的冲突

[复制链接]

Lv2.观梦者

秀才

梦石
0
星屑
592
在线时间
156 小时
注册时间
2008-7-23
帖子
290

贵宾

跳转到指定楼层
1
发表于 2012-8-3 16:53:45 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这是一个关于电影模式的脚本。
  1. #==============================================================================
  2. # ■ Window_MSGMovie
  3. #------------------------------------------------------------------------------
  4. #  电影模式下显示文章的信息窗口。
  5. #==============================================================================

  6. # 电影模式开关  默认为 50号开关
  7. $movie_switches = 100
  8. # 电影模式下等待关闭文字 默认 50号变量
  9. $close_speak = 100


  10. class Window_MSGMovie < Window_Base
  11.   #--------------------------------------------------------------------------
  12.   # ● 初始化状态
  13.   #--------------------------------------------------------------------------
  14.   def initialize
  15.     super(0,400,640,80)
  16.     self.contents = Bitmap.new(width, height)
  17.     self.windowskin = Bitmap.new(30,30)
  18.     $game_temp.message_window_showing = false
  19.     self.z = 199
  20.   end
  21.   #--------------------------------------------------------------------------
  22.   # ● 处理信息结束
  23.   #--------------------------------------------------------------------------
  24.   def end_MSG
  25.     self.active = false
  26.     self.pause = false
  27.     self.contents.clear
  28.     # 呼叫信息调用
  29.     if $game_temp.message_proc != nil
  30.       $game_temp.message_proc.call
  31.     end
  32.     # 清除文章、选择项、输入数值的相关变量
  33.     $game_temp.message_text = nil
  34.     $game_temp.message_proc = nil
  35.     $game_temp.choice_start = 99
  36.     $game_temp.choice_max = 0
  37.     $game_temp.choice_cancel_type = 0
  38.     $game_temp.choice_proc = nil
  39.     $game_temp.num_input_start = 99
  40.     $game_temp.num_input_variable_id = 0
  41.     $game_temp.num_input_digits_max = 0
  42.   end
  43.   #--------------------------------------------------------------------------
  44.   # ● 刷新
  45.   #--------------------------------------------------------------------------
  46.   def refresh
  47.     self.contents.clear
  48.     x = 0
  49.     if $game_temp.message_text != nil
  50.       temp_text = $game_temp.message_text.clone
  51.       movie_text = $game_temp.message_text.clone
  52.       # 模拟执行(计算文字位置)
  53.       text = ""
  54.       # 转换字符
  55.       temp_text.gsub!(/\\\\/) { "\000" }
  56.       temp_text.gsub!(/\\[Cc]\[([0-9]+)\]/) { "\001[#{$1}]" }
  57.       temp_text.gsub!(/\\[Vv]\[([0-9]+)\]/) { "\002[#{$1}]" }
  58.       temp_text.gsub!(/\\[Nn]\[([0-9]+)\]/) { "\003[#{$1}]" }
  59.       while((c = temp_text.slice!(/./m)) != nil)
  60.         if c == "\000"
  61.           c = "\\"
  62.         end
  63.         if c == "\001"
  64.           # 更改文字色
  65.           temp_text.sub!(/\[([0-9]+)\]/, "")
  66.           color = $1.to_i
  67.           c = ""
  68.           text += c
  69.           next
  70.         end
  71.         if c == "\002"
  72.           c = $game_variables[$1.to_i].to_s
  73.           temp_text.sub!(/\[([0-9]+)\]/, "")
  74.           text += c
  75.           next
  76.         end
  77.         if c == "\003"
  78.           temp_text.sub!(/\[([0-9]+)\]/, "")
  79.           c = $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""
  80.           text += c
  81.           next
  82.         end
  83.         if c == "\n"
  84.           c = ""
  85.           text += c
  86.           next
  87.         end
  88.         text += c
  89.       end
  90.       # 计算文字居中位置
  91.       move_x = (640 - self.contents.text_size(text).width) / 2 -20
  92.       # 执行 (显示文字)
  93.       movie_text.gsub!(/\\\\/) { "\000" }
  94.       movie_text.gsub!(/\\[Cc]\[([0-9]+)\]/) { "\001[#{$1}]" }
  95.       movie_text.gsub!(/\\[Vv]\[([0-9]+)\]/) { "\002[#{$1}]" }
  96.       movie_text.gsub!(/\\[Nn]\[([0-9]+)\]/) { "\003[#{$1}]" }
  97.       while((m = movie_text.slice!(/./m)) != nil)
  98.         if m == "\000"
  99.           m = "\\"
  100.         end
  101.         if m == "\001"
  102.           # 更改文字色
  103.           movie_text.sub!(/\[([0-9]+)\]/, "")
  104.           color = $1.to_i
  105.           if color >= 0 and color <= 7
  106.             self.contents.font.color = text_color(color)
  107.           end
  108.           # 下面的文字
  109.           next
  110.         end
  111.         if m == "\002"
  112.           m = $game_variables[$1.to_i].to_s
  113.           movie_text.sub!(/\[([0-9]+)\]/, "")
  114.         end
  115.         if m == "\003"
  116.           movie_text.sub!(/\[([0-9]+)\]/, "")
  117.           m = $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""
  118.         end
  119.         if m == "\n"
  120.           m = ""
  121.         end
  122.         self.contents.draw_text(move_x + x,0,self.contents.text_size(m).width,32,m)
  123.         x += self.contents.text_size(m).width
  124.       end
  125.       # 返回系统文字颜色
  126.       self.contents.font.color = normal_color
  127.       # 清理显示文字
  128.       $game_temp.message_text = nil
  129.     end
  130.   end
  131.   #--------------------------------------------------------------------------
  132.   # ● 刷新画面
  133.   #--------------------------------------------------------------------------
  134.   def update
  135.     super
  136.     # 等待循环
  137.     if $game_variables[$close_speak] >= 2
  138.       $game_variables[$close_speak] -= 1
  139.     end
  140.     if $game_variables[$close_speak] == 1
  141.       $game_variables[$close_speak] = 0
  142.       end_MSG
  143.     end
  144.     # 当C键按下时
  145.     if Input.trigger?(Input::C) and $game_variables[$close_speak] == 0
  146.       end_MSG
  147.     end
  148.     # 显示文字
  149.     if $game_temp.message_text != nil
  150.       refresh
  151.       return
  152.     end
  153.   end
  154. end

  155. # --重定义Scene_Map类
  156. class Scene_Map
  157.   #--------------------------------------------------------------------------
  158.   # ● 主处理
  159.   #--------------------------------------------------------------------------
  160.   def main
  161.     # 生成活动块
  162.     @spriteset = Spriteset_Map.new
  163.     # 生成信息窗口
  164.     @message_window = Window_Message.new
  165.     # 生成电影模式对话窗口
  166.     @MSG_Movie_Window = Window_MSGMovie.new
  167.     # 电影模式黑框
  168.     @black = Sprite.new
  169.     @black.bitmap = Bitmap.new(640,480)
  170.     @black.bitmap.fill_rect(0,0,640,50,Color.new(25,25,25,255))
  171.     @black.bitmap.fill_rect(0,400,640,80,Color.new(25,25,25,255))
  172.     @black.opacity = 0
  173.     # 执行过渡
  174.     Graphics.transition
  175.     # 主循环
  176.     loop do
  177.       # 刷新游戏画面
  178.       Graphics.update
  179.       # 刷新输入信息
  180.       Input.update
  181.       # 刷新画面
  182.       update
  183.       # 如果画面切换的话就中断循环
  184.       if $scene != self
  185.         break
  186.       end
  187.     end
  188.     # 准备过渡
  189.     Graphics.freeze
  190.     # 释放活动块
  191.     @spriteset.dispose
  192.     # 释放信息窗口
  193.     @message_window.dispose
  194.     # 释放信息窗口
  195.     @MSG_Movie_Window.dispose
  196.     # 标题画面切换中的情况下
  197.     if $scene.is_a?(Scene_Title)
  198.       # 淡入淡出画面
  199.       Graphics.transition
  200.       Graphics.freeze
  201.     end
  202.   end
  203.   #--------------------------------------------------------------------------
  204.   # ● 刷新画面
  205.   #--------------------------------------------------------------------------
  206.   def update
  207.     # 循环
  208.     loop do
  209.       # 按照地图、实例、主角的顺序刷新
  210.       # (本更新顺序不会在的满足事件的执行条件下成为给予角色瞬间移动
  211.       #  的机会的重要因素)
  212.       $game_map.update
  213.       $game_system.map_interpreter.update
  214.       $game_player.update
  215.       # 系统 (计时器)、画面刷新
  216.       $game_system.update
  217.       $game_screen.update
  218.       # 如果主角在场所移动中就中断循环
  219.       unless $game_temp.player_transferring
  220.         break
  221.       end
  222.       # 执行场所移动
  223.       transfer_player
  224.       # 处理过渡中的情况下、中断循环
  225.       if $game_temp.transition_processing
  226.         break
  227.       end
  228.     end
  229.     # 刷新活动块
  230.     @spriteset.update
  231.     # 选择刷新
  232.     if $game_switches[$movie_switches] == false
  233.       # 刷新信息窗口
  234.       @message_window.update
  235.       # 电影模式的黑框
  236.       @black.opacity = 0
  237.     else
  238.       # 刷新电影模式信息
  239.       @MSG_Movie_Window.update
  240.       # 电影模式的黑框
  241.       @black.opacity = 250
  242.     end
  243.     # 游戏结束的情况下
  244.     if $game_temp.gameover
  245.       # 切换的游戏结束画面
  246.       $scene = Scene_Gameover.new
  247.       return
  248.     end
  249.     # 返回标题画面的情况下
  250.     if $game_temp.to_title
  251.       # 切换到标题画面
  252.       $scene = Scene_Title.new
  253.       return
  254.     end
  255.     # 处理过渡中的情况下
  256.     if $game_temp.transition_processing
  257.       # 清除过渡处理中标志
  258.       $game_temp.transition_processing = false
  259.       # 执行过渡
  260.       if $game_temp.transition_name == ""
  261.         Graphics.transition(20)
  262.       else
  263.         Graphics.transition(40, "Graphics/Transitions/" +
  264.           $game_temp.transition_name)
  265.       end
  266.     end
  267.     # 显示信息窗口中的情况下
  268.     if $game_temp.message_window_showing
  269.       return
  270.     end
  271.     # 遇敌计数为 0 且、且遇敌列表不为空的情况下
  272.     if $game_player.encounter_count == 0 and $game_map.encounter_list != []
  273.       # 不是在事件执行中或者禁止遇敌中
  274.       unless $game_system.map_interpreter.running? or
  275.              $game_system.encounter_disabled
  276.         # 确定队伍
  277.         n = rand($game_map.encounter_list.size)
  278.         troop_id = $game_map.encounter_list[n]
  279.         # 队伍有效的话
  280.         if $data_troops[troop_id] != nil
  281.           # 设置调用战斗标志
  282.           $game_temp.battle_calling = true
  283.           $game_temp.battle_troop_id = troop_id
  284.           $game_temp.battle_can_escape = true
  285.           $game_temp.battle_can_lose = false
  286.           $game_temp.battle_proc = nil
  287.         end
  288.       end
  289.     end
  290.     # 按下 B 键的情况下
  291.     if Input.trigger?(Input::B)
  292.       # 不是在事件执行中或菜单禁止中
  293.       unless $game_system.map_interpreter.running? or
  294.              $game_system.menu_disabled
  295.         # 设置菜单调用标志以及 SE 演奏
  296.         $game_temp.menu_calling = true
  297.         $game_temp.menu_beep = true
  298.       end
  299.     end
  300.     # 调试模式为 ON 并且按下 F9 键的情况下
  301.     if $DEBUG and Input.press?(Input::F9)
  302.       # 设置调用调试标志
  303.       $game_temp.debug_calling = true
  304.     end
  305.     # 不在主角移动中的情况下
  306.     unless $game_player.moving?
  307.       # 执行各种画面的调用
  308.       if $game_temp.battle_calling
  309.         call_battle
  310.       elsif $game_temp.shop_calling
  311.         call_shop
  312.       elsif $game_temp.name_calling
  313.         call_name
  314.       elsif $game_temp.menu_calling
  315.         call_menu
  316.       elsif $game_temp.save_calling
  317.         call_save
  318.       elsif $game_temp.debug_calling
  319.         call_debug
  320.       end
  321.     end
  322.   end
  323. end
  324. #=============================================================================
  325. # 本脚本来自66RPG,如使用请保留此信息
  326. #[癫狂侠客]书写脚本
  327. #=============================================================================
复制代码
这是个关于日期交替的脚本,当这个脚本被放到“电影”脚本上面时,日期无效,当放到下面,出现冲突。求解……
  1. class Scene_Map
  2. def main
  3.    @spriteset = Spriteset_Map.new
  4.    @message_window = Window_Message.new
  5.    @time_date_window = Window_Time_Date.new
  6.    Graphics.transition
  7.    loop do
  8.      Graphics.update
  9.      Input.update
  10.      update
  11.      if $scene != self
  12.        break
  13.      end # end if $scene != self
  14.    end # end loop do
  15.    Graphics.freeze
  16.    @spriteset.dispose
  17.    @message_window.dispose
  18.    @time_date_window.dispose
  19.    if $scene.is_a?(Scene_Title)
  20.      Graphics.transition
  21.      Graphics.freeze
  22.    end # end if $scene.is_a?(Scene_Title)
  23. end # end def main
  24. end # end class Scene_Map
  25. class Window_Time_Date < Window_Base
  26. def initialize
  27. super(0, 0, 250, 55)
  28. self.contents = Bitmap.new(width - 33, height - 33)
  29. refresh
  30. end # end def initialize
  31. def refresh
  32.     self.contents.clear
  33.     self.contents.font.color = system_color
  34.     self.contents.font.size = 19
  35.   @total_sec = Graphics.frame_count
  36.    if @total_sec % 9 ==0
  37.      $game_variables[1] += 1
  38.    end # end if @total_sec % 40 ==0
  39.    
  40.    if $game_variables[1] >= 60 + 0
  41.      $game_variables[1] = 0
  42.      $game_variables[2] += 1
  43.    end # end if $game_variables[1] >= 60 + 0
  44.    
  45.    if $game_variables[2] >= 23 + 1
  46.      $game_variables[2] = 0
  47.      $game_variables[3] += 1
  48.    end # end if $game_variables[2] >= 23 + 1
  49.    
  50.    if $game_variables[3] >= 30 + 1
  51.      $game_variables[3] = 1
  52.      $game_variables[4] += 1
  53.    end # end if $game_variables[3] >= 30 + 1
  54.    
  55.    if $game_variables[4] >= 12 + 1
  56.      $game_variables[4] = 1
  57.      $game_variables[5] += 1
  58.    end # end if $game_variables[4] >= 12 + 1
  59.    
  60.    text_min = ["00", "01", "02", "03", "04", "05", "06","07","08","09","10","11",
  61.    "12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27",
  62.    "28","29","30","31","32","33","34","35","36","37","38","39","40","41","42","43",
  63.    "44","45","46","47","48","49","50","51","52","53","54","55","56","57","58","59",
  64.    "60"][$game_variables[1]]
  65.    text_hour = ["00:", "01:", "02:", "03:", "04:", "05:", "06:",
  66.                 "07:", "08:", "09:", "10:", "11:", "12:","13:","14:","15:","16:",
  67.                 "17:","18:","19:","20:","21:","22:","23:","24:"][$game_variables[2]]
  68.    text_day = ["", "01日", "02日", "03日", "04日", "05日", "06日",
  69.                "07日", "08日", "09日", "10日", "11日", "12日",
  70.                "13日", "14日", "15日", "16日", "17日", "18日",
  71.                "19日", "20日", "21日", "22日", "23日", "24日",
  72.                "25日", "26日", "27日", "28日", "29日",
  73.                "30日"][$game_variables[3]]
  74.    text_month = ["", " 01月", " 02月", " 03月", " 04月", " 05月", " 06月",
  75.                   " 07月", " 08月", " 09月", " 10月", " 11月", " 12月"][$game_variables[4]]
  76.    text_year = ["1560年", "1561年", "1562年","1563年","1564年","1565年","1566年",
  77.    "1567年","1568年","1569年","1570年","1571年","1572年"][$game_variables[5]]
  78. self.contents.clear
  79. self.contents.draw_text(5, -5, 128, 32,text_year)
  80. self.contents.draw_text(60, -5, 128, 32, text_month)
  81. self.contents.draw_text(111, -5, 128, 32, text_day)
  82. self.contents.draw_text(155, -5, 128, 32, text_hour)
  83. self.contents.draw_text(184, -5, 128, 32, text_min)
  84.   def update
  85.     super
  86.       refresh
  87.   end
  88. end
  89. end
复制代码

Lv1.梦旅人

◇无限的妄想者◇

梦石
0
星屑
55
在线时间
1441 小时
注册时间
2012-7-14
帖子
2339
2
发表于 2012-8-3 17:43:26 | 只看该作者
两个脚本都关于Sence_Map的main函数进行重写,将内容合并一下就好了应该。

点评

我合不来,帮帮忙……  发表于 2012-8-3 17:58

————————————————————————————————————
新坑Dreamoon酝酿中,预计短篇⑨完工发布。
————————————————————————————————————
如何调戏橙光文字的 高级UI 系列教程:  鉴赏页制作篇背包系统制作篇
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
75
在线时间
435 小时
注册时间
2012-7-31
帖子
796
3
发表于 2012-8-3 18:03:07 | 只看该作者
在日期脚本的def main后面加上这一段:
@MSG_Movie_Window = Window_MSGMovie.new
   @black = Sprite.new
   @black.bitmap = Bitmap.new(640,480)
   @black.bitmap.fill_rect(0,0,640,50,Color.new(25,25,25,255))
   @black.bitmap.fill_rect(0,400,640,80,Color.new(25,25,25,255))
   @black.opacity = 0
   @black.z = 1

点评

而且这个时间脚本不管删不删掉电影模式后都用不起了……  发表于 2012-8-3 21:06
回复

使用道具 举报

Lv2.观梦者

秀才

梦石
0
星屑
592
在线时间
156 小时
注册时间
2008-7-23
帖子
290

贵宾

4
 楼主| 发表于 2012-8-3 20:48:35 | 只看该作者
@原野清平不好意思,修改后有个问题:时间不走了,卡在菜单上。
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
75
在线时间
435 小时
注册时间
2012-7-31
帖子
796
5
发表于 2012-8-3 20:50:30 | 只看该作者
本帖最后由 原野清平 于 2012-8-3 20:55 编辑

电影脚本234行最后打一个空格,加入这个:
@time_date_window.refresh
大功告成。@z121310

评分

参与人数 1星屑 +200 收起 理由
z121310 + 200 求你再修改下……

查看全部评分

回复

使用道具 举报

Lv2.观梦者

秀才

梦石
0
星屑
592
在线时间
156 小时
注册时间
2008-7-23
帖子
290

贵宾

6
 楼主| 发表于 2012-8-3 21:47:24 | 只看该作者
原野清平 发表于 2012-8-3 20:50
电影脚本234行最后打一个空格,加入这个:
@time_date_window.refresh
大功告成。@z121310 ...

最后一个问题:使用此修改,时间变得特别慢,而且是走是不走,该怎样修改计算。
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
75
在线时间
435 小时
注册时间
2012-7-31
帖子
796
7
发表于 2012-8-4 11:18:32 | 只看该作者
自己测试十分快啊~
这不可能。
LZ自己又加了别人的脚本吗?这样的话顺便把范例拿上来哦亲~
还有,不是打空格,是回车。改成回车试试看,也许有用。
@z121310
回复

使用道具 举报

Lv2.观梦者

秀才

梦石
0
星屑
592
在线时间
156 小时
注册时间
2008-7-23
帖子
290

贵宾

8
 楼主| 发表于 2012-8-4 12:06:08 | 只看该作者
原野清平 发表于 2012-8-4 11:18
自己测试十分快啊~
这不可能。
LZ自己又加了别人的脚本吗?这样的话顺便把范例拿上来哦亲~

1.谢谢,是用的回车  2.时间能走,但我这里大概40——60 S 为1 Min,而且需要用菜单才能刷新时间,你看看我的脚本和公共事件是不是太多了。(还有开关和变量……)这只是个普通工程,游戏本体太大。

Project2.zip

235.56 KB, 下载次数: 28

回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
75
在线时间
435 小时
注册时间
2012-7-31
帖子
796
9
发表于 2012-8-4 12:37:37 | 只看该作者
看看这样。
时间是不是快了= =
Project2.rar (229.1 KB, 下载次数: 49)

评分

参与人数 1星屑 +400 收起 理由
z121310 + 400 这是什么原因造成的?

查看全部评分

回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
75
在线时间
435 小时
注册时间
2012-7-31
帖子
796
10
发表于 2012-8-4 14:44:58 | 只看该作者
原因是窗口没有及时被刷新。
在Scene_Map的刷新类里加入窗口的刷新即可。
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-15 07:15

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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