Project1

标题: 窗口飞入 [打印本页]

作者: 布罗利    时间: 2016-2-2 13:01
标题: 窗口飞入
本帖最后由 布罗利 于 2016-2-3 11:04 编辑

{:2_248:}
这个系统我很久以前就写过了,一直没完善,今天终于完善了。
{:2_275:}
主要的功能是:进入场景的时候,窗口会有个飞入的动画,这样感觉会比较华丽有木有
{:2_286:}
也不知道VA有没有过类似的脚本,至少我没发现,不过XP有现成的,但用起来十分麻烦
{:2_278:}
话不多说,上脚本!
已更新至1.1版本
[box=PaleTurquoise]1.1更新内容
1-【支持自动执行move_start,用起来更简便】
2-【支持余数的运算,有余数窗口也会自动归位】[/box]

[box=Pink]注意!
1.0版本需要调用move_start这个方法,更新至1.1版本后
不需要再调用这个方法,请将1.0调用move_start的语句删除,不然会有BUG
[/box]

[box=Wheat]1.2版本预告
如果我有时间写1.2版本的话,除了修复BUG外,还会增添一些效果
目前只支持4种效果
1 窗口由上到下飞入
2 窗口由下到上飞入
3 窗口由左到右飞入
4 窗口由右到左飞入
1.2版本将会有更多的效果,例如窗口弹跳,窗口由小变大 等等.....
前提是我有时间的话.......
[/box]

RUBY 代码复制
  1. =begin
  2. #==============================================================================
  3. 窗口飞入1.1    By 霸道  QQ1711044261  (C)神话时代制作组 2016_2_2
  4. #==============================================================================
  5.  
  6. 1.1更新内容
  7.  
  8. 1-【支持自动执行move_start,用起来更简便】
  9. 2-【支持余数的运算,有余数窗口也会自动归位】
  10.  
  11. #==============================================================================
  12. 窗口进入
  13. Window_move::speed(window,index)
  14. 窗口离开
  15. Window_move::speed_back(window,index)
  16.  
  17. 说明:系统会自动执行move_start和move_end两个方法,请不要改这两个方法名,否则会无效
  18.  
  19. index
  20. 1 窗口由上到下飞入
  21. 2 窗口由下到上飞入
  22. 3 窗口由左到右飞入
  23. 4 窗口由右到左飞入
  24. 注意:这是窗口进入的index 窗口离开的index和这个相反
  25.  
  26. 动画速度
  27. 窗口的默认速度为8帧
  28. 如果需要改速度 改这个全局变量即可
  29. 值越小 速度越快 值越大 速度越慢
  30. $window_speed =
  31. #==============================================================================
  32.  
  33. 已知不足
  34. 1.0版本的不足已经全部改善,暂未发现不足
  35. 如有发现不足 请联系 QQ1711044261或66RPG ID:布罗利
  36.  
  37. 已知BUG
  38. 暂未发现BUG 如发现BUG想要解决 请联系 QQ1711044261或66RPG ID:布罗利
  39.  
  40. 容易出现的问题
  41. 1、====================================
  42. 问:为什么窗口离开没有效果
  43. 答:目前发现两种可能
  44. 1、有可能窗口离开的语句和窗口进入的语句写反了
  45. 窗口离开的语句必须是Window_move::speed_back(window,index)
  46. 2、有可能改动了你改动了pre_terminate这个方法,具体要根据实际脚本来解决
  47.  
  48. 如有问题出现 请联系 QQ1711044261或66RPG ID:布罗利
  49.  
  50. #==============================================================================
  51. 范例:
  52.   #--------------------------------------------------------------------------
  53.   # ● 窗口进入
  54.   #--------------------------------------------------------------------------
  55.   def move_start
  56.     Window_move::speed(window,index)
  57.   end
  58.   #--------------------------------------------------------------------------
  59.   # ● 窗口离开
  60.   #--------------------------------------------------------------------------
  61.   def move_end
  62.     Window_move::speed_back(window,index)
  63.   end
  64. #==============================================================================
  65.  
  66. =end
  67.  
  68. $window_speed = 8
  69. $windows = []
  70.  
  71. class Scene_Base
  72.   def post_start
  73.     move_start if respond_to? :move_start
  74.     perform_transition
  75.     Input.update
  76.     Window_move::move #if respond_to? :move_start
  77.   end
  78.   def pre_terminate
  79.     move_end if respond_to? :move_end
  80.     Window_move::move_back
  81.   end
  82. end
  83.  
  84. module Window_move
  85.   def self.speed(window,index=1)
  86.     if window == nil
  87.        return
  88.      end
  89.     window.opacity = 0
  90.     window.contents_opacity = 0
  91.     x = window.x ; y = window.y
  92.     a = 0 ; b = 0
  93.     case index
  94.     when 1
  95.       b = (window.height + y) / $window_speed
  96.       c = (window.height + y) % $window_speed
  97.     when 2
  98.       b = (Graphics.height-y) / $window_speed
  99.       c = (Graphics.height-y) % $window_speed
  100.     when 3
  101.       a = (window.width + x) / $window_speed
  102.       c = (window.width + x) % $window_speed
  103.     when 4
  104.       a = (Graphics.width-x) / $window_speed
  105.       c = (Graphics.width-x) % $window_speed
  106.     end
  107.     $windows << [window,index,a,b,c,x,y]
  108.     case index
  109.     when 1
  110.       window.y = -window.height
  111.     when 2
  112.       window.y = Graphics.height
  113.     when 3
  114.       window.x = -window.width
  115.     when 4
  116.       window.x = Graphics.width
  117.     end
  118.   end
  119.   def self.move
  120.     $window_speed.times do |i|
  121.       $windows.each do |window,n,a,b,c,x,y|
  122.         case n
  123.         when 1
  124.           window.y += b
  125.           window.opacity += 256 / $window_speed
  126.           window.contents_opacity += 256 / $window_speed
  127.         when 2
  128.           window.y -= b
  129.           window.opacity += 256 / $window_speed
  130.           window.contents_opacity += 256 / $window_speed
  131.         when 3
  132.           window.x+= a
  133.           window.opacity += 256 / $window_speed
  134.           window.contents_opacity += 256 / $window_speed
  135.         when 4
  136.           window.x -= a
  137.           window.opacity += 256 / $window_speed
  138.           window.contents_opacity += 256 / $window_speed
  139.         end
  140.       end
  141.       Graphics.update
  142.     end
  143.     $windows.each do |window,n,a,b,c,x,y|
  144.       window.x = x
  145.       window.y = y
  146.     end
  147.     $windows = []
  148.   end
  149. ################################################################################  
  150.    def self.speed_back(window,index=1)
  151.      if window == nil
  152.        return
  153.      end
  154.     x = window.x
  155.     y = window.y
  156.     a = 0
  157.     b = 0
  158.     case index
  159.     when 1
  160.       b = (window.height + y) / $window_speed
  161.     when 2
  162.       b = (Graphics.height-y) / $window_speed
  163.     when 3
  164.       a = (window.width + x) / $window_speed
  165.     when 4
  166.       a = (Graphics.width-x) / $window_speed
  167.     end
  168.     $windows << [window,index,a,b]
  169.    end
  170.    def self.move_back
  171.     $window_speed.times do
  172.       $windows.each do |window,n,a,b|
  173.         case n
  174.         when 1
  175.           window.y -= b
  176.           window.opacity -= 256 / $window_speed
  177.           window.contents_opacity -= 256 / $window_speed
  178.         when 2
  179.           window.y += b
  180.           window.opacity -= 256 / $window_speed
  181.           window.contents_opacity -= 256 / $window_speed
  182.         when 3
  183.           window.x -= a
  184.           window.opacity -= 256 / $window_speed
  185.           window.contents_opacity -= 256 / $window_speed
  186.         when 4
  187.           window.x += a
  188.           window.opacity -= 256 / $window_speed
  189.           window.contents_opacity -= 256 / $window_speed
  190.         end
  191.       end
  192.       Graphics.update
  193.     end
  194.     $windows = []
  195.   end
  196. end



脚本效果:


{:2_266:}
等级太低,图片最大3兆,清晰度没了.....

顺便附上范例工程: 窗口飞入范例.rar (1.55 MB, 下载次数: 251, 售价: 5 星屑)

@芯☆淡茹水 @牛肉面 @邪月长啸 @VIPArcher @RyanBern @上贺茂润 @怪蜀黍 @三途亚梦 @天使喝可乐 @myownroc @chd114 @YamazakiRyusa @黄谊洲 @slick @永燃的狂炎 @龙和许也 @月华风


作者: 三途亚梦    时间: 2016-2-2 15:13
这个我记得就在这个区就有呢,不过标签是【已发主站】哦~
作者: 上贺茂润    时间: 2016-2-2 16:00
之前就用过了

作者: hfz521999    时间: 2016-2-3 00:35
谢谢楼主了,先收藏了!!!不过我的脚本用的比较多 怕会有冲突 先试一下
作者: 布罗利    时间: 2016-2-3 10:56
本帖最后由 布罗利 于 2016-2-3 11:00 编辑

已更新至1.1版本
1.1更新内容
1-【支持自动执行move_start,用起来更简便】
2-【支持余数的运算,有余数窗口也会自动归位】
这个系认可以进VA图书馆吗?
@怪蜀黍                                       
@VIPArcher
作者: taroxd    时间: 2016-2-3 11:51
本帖最后由 taroxd 于 2016-2-3 12:11 编辑
布罗利 发表于 2016-2-3 10:56
已更新至1.1版本
1.1更新内容
1-【支持自动执行move_start,用起来更简便】


RUBY 代码复制
  1. class Window_Base
  2.  
  3.   alias_method :real_x, :x
  4.   alias_method :real_x=, :x=
  5.   attr_reader :target_x
  6.   alias_method :x, :target_x
  7.  
  8.   alias_method :init_without_transition, :initialize
  9.   def initialize(x, y, width, height)
  10.     @target_x = x
  11.     init_without_transition(-width, y, width, height)
  12.     update_transition_speed
  13.   end
  14.  
  15.   alias_method :update_without_transition, :update
  16.   def update
  17.     if real_x != target_x
  18.       new_x = real_x + @transition_speed
  19.       new_x = target_x if new_x > target_x
  20.       self.real_x = new_x
  21.     end
  22.     update_without_transition
  23.   end
  24.  
  25.   def x=(x)
  26.     @target_x = x
  27.     update_transition_speed
  28.   end
  29.  
  30.   def transition_duration
  31.     8
  32.   end
  33.  
  34.   def update_transition_speed
  35.     @transition_speed = (target_x - real_x).fdiv transition_duration
  36.   end
  37. end


其实这样就足够好看了,太花哨反而乱的说。(该脚本不需要配置)



楼主写出这段东西是很好的。支持楼主继续学脚本写脚本~

对楼主的脚本留下一点小意见吧:
对于简单的需求,配置过于复杂,甚至需要脚本的知识。
对于复杂的需求,这个脚本不支持配置(别跟我说直接改 123 行那一块。这个昨天群里已经说过了)。
作者: chd114    时间: 2016-2-6 14:07
效果图···你是加快了?还是本来就那样,感觉闪的太快了···
作者: Vortur    时间: 2016-2-22 21:16
谢谢分享!~很实用的代码!
作者: 生生世世死    时间: 2018-1-30 14:57
谢谢分享!~很实用的代码
作者: 风华冈    时间: 2019-7-21 21:01
围观一下--




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