Project1

标题: 櫻花飄落的效果 [打印本页]

作者: 雪蓮姬    时间: 2016-5-15 17:24
标题: 櫻花飄落的效果
怎麼在遊戲中實現櫻花或葉子飄落的效果??
作者: QQ1649912323    时间: 2016-5-15 18:55
本帖最后由 QQ1649912323 于 2016-5-18 19:10 编辑
  1. #==============================================================================
  2. # +++ MOG - Weather EX (v2.2) +++
  3. #==============================================================================
  4. # By Moghunter
  5. # https://atelierrgss.wordpress.com/
  6. #==============================================================================
  7. # Sistema de clima com efeitos animados.
  8. #==============================================================================
  9. # As imagens usadas pelo sistema do clima devem ser gravadas na pasta
  10. #
  11. # GRAPHICS/WEATHER/
  12. #
  13. #==============================================================================
  14. # UTILIZAÇÃO
  15. #
  16. # Use o comando abaixo através da função chamar script.*(Evento)
  17. #
  18. # weather(TYPE, POWER, IMAGE_FILE)
  19. #
  20. # TYPE - Tipo de clima. (de 0 a 6)
  21. # POWER - Quantidade de partículas na tela. (de 1 a 10)
  22. # IMAGE_FILE - Nome da imagem.
  23. #
  24. # Exemplo (Eg)
  25. #
  26. # weather(0, 5, "Leaf")
  27. #
  28. #==============================================================================
  29. # Tipos de Clima.
  30. #
  31. # O sistema vem com 7 climas pré-configurados, que podem ser testados na demo
  32. # que vem com esse script.
  33. #
  34. # 0 - (Rain)  
  35. # 1 - (Wind)
  36. # 2 - (Fog)  
  37. # 3 - (Light)
  38. # 4 - (Snow)
  39. # 5 - (Spark)
  40. # 6 - (Random)
  41. #
  42. #==============================================================================
  43. # NOTA
  44. #
  45. # Evite de usar imagens muito pesadas ou de tamanho grande, caso for usar
  46. # diminua o poder do clima para evitar lag.
  47. #
  48. #==============================================================================
  49. #==============================================================================
  50. # Para parar o clima use o comando abaixo.
  51. #
  52. # weather_stop
  53. #==============================================================================
  54. # Para parar o clima após a batalha use o código abaixo.
  55. #
  56. # weather_stop_b
  57. #
  58. #==============================================================================
  59. # Para parar reativar o clima com as caracteríticas préviamente usadas use o
  60. # comando abaixo.
  61. #
  62. # weather_restore
  63. #==============================================================================
  64. # Se você precisar ativar um novo clima mas deseja gravar as caracteríticas
  65. # do clima atual para ser reativado depois use os códigos abaixo.
  66. #
  67. # weather_store
  68. # weather_restore_store
  69. #
  70. #==============================================================================

  71. #==============================================================================
  72. # ● Histórico (Version History)
  73. #==============================================================================
  74. # v 2.2 - Adicionado o comando parar o clima após a batalha.
  75. # v 2.1 - Melhoria na posição das partículas durante as transições
  76. #         de scenes.
  77. # v 2.0 - Correção do bug do Crash aleatório.
  78. #==============================================================================
  79. module MOG_WEATHER_EX
  80.   #Prioridade do clima na tela.
  81.   WEATHER_SCREEN_Z = 50
  82.   #Definição da eficiência do poder do clima.
  83.   #NOTA -  Um valor muito alto pode causar lag, dependendo do tipo de clima e
  84.   #        imagem usada.
  85.   WEATHER_POWER_EFIC = 5
  86.   #Ativar o clima no sistema de batalha.
  87.   WEATHER_BATTLE = true
  88. end

  89. $imported = {} if $imported.nil?
  90. $imported[:mog_weather_ex] = true

  91. #==============================================================================
  92. # ■ Cache
  93. #==============================================================================
  94. module Cache
  95.   
  96.   #--------------------------------------------------------------------------
  97.   # ● Weather
  98.   #--------------------------------------------------------------------------
  99.   def self.weather(filename)
  100.       load_bitmap("Graphics/Weather/", filename)
  101.   end
  102.   
  103. end

  104. #==============================================================================
  105. # ■ Game System
  106. #==============================================================================
  107. class Game_System
  108.   
  109.   attr_accessor :weather
  110.   attr_accessor :weather_restore
  111.   attr_accessor :weather_record_set
  112.   attr_accessor :weather_temp
  113.   
  114.   #--------------------------------------------------------------------------
  115.   # ● Initialize
  116.   #--------------------------------------------------------------------------  
  117.   alias weather_ex_initialize initialize  
  118.   def initialize
  119.       @weather = [-1,0,""]
  120.       @weather_restore = [-1,0,""]
  121.       @weather_temp = [-1,0,""]
  122.       @weather_record_set = [-1,0,""]
  123.       weather_ex_initialize
  124.   end  
  125.   
  126. end  

  127. #==============================================================================
  128. # ■ Game Temp
  129. #==============================================================================
  130. class Game_Temp

  131.   attr_accessor :weather_ex_set
  132.   attr_accessor :weather_fade
  133.   attr_accessor :weather_rf_time
  134.   attr_accessor :weather_fstop
  135.   
  136.   #--------------------------------------------------------------------------
  137.   # ● Initialize
  138.   #--------------------------------------------------------------------------  
  139.   alias mog_weather_ex_temp_initialize initialize
  140.   def initialize
  141.       @weather_ex_set = []
  142.       @weather_fade = false
  143.       @weather_rf_time = 0
  144.       @weather_fstop = false
  145.       mog_weather_ex_temp_initialize
  146.   end  
  147.   
  148. end

  149. #==============================================================================
  150. # ■ Game Interpreter
  151. #==============================================================================
  152. class Game_Interpreter
  153.   
  154.   #--------------------------------------------------------------------------
  155.   # ● Weather
  156.   #--------------------------------------------------------------------------   
  157.   def weather(type = -1, power = 0, image = "")
  158.       $game_temp.weather_fade = false
  159.       $game_temp.weather_rf_time = 0
  160.       $game_system.weather.clear
  161.       $game_system.weather = [type,power,image]
  162.   end
  163.   
  164.   #--------------------------------------------------------------------------
  165.   # ● Weather Stop
  166.   #--------------------------------------------------------------------------     
  167.   def weather_stop
  168.       $game_temp.weather_fade = false
  169.       $game_system.weather.clear
  170.       $game_system.weather = [-1,0,""]
  171.       $game_system.weather_restore  = [-1,0,""]
  172.       $game_system.weather_temp = [-1,0,""]      
  173.   end
  174.   
  175.   #--------------------------------------------------------------------------
  176.   # ● Weather Restore
  177.   #--------------------------------------------------------------------------      
  178.   def weather_restore
  179.       $game_temp.weather_fade = false
  180.       if $game_system.weather[0] != -1
  181.          w = $game_system.weather
  182.          $game_system.weather_restore = [w[0],w[1],w[2]]
  183.          $game_system.weather.clear
  184.          $game_system.weather = [-1,0,""]
  185.          return
  186.       end
  187.       w = $game_system.weather_restore
  188.       weather(w[0],w[1],w[2])
  189.   end
  190.   
  191.   #--------------------------------------------------------------------------
  192.   # ● Weather Fade
  193.   #--------------------------------------------------------------------------         
  194.   def weather_fade(value)
  195.       $game_temp.weather_fade = value
  196.   end
  197.   
  198.   #--------------------------------------------------------------------------
  199.   # ● Weather Store
  200.   #--------------------------------------------------------------------------           
  201.   def weather_store
  202.       w = $game_system.weather
  203.       $game_system.weather_record_set = [w[0],w[1],w[2]]
  204.   end  
  205.   
  206.   #--------------------------------------------------------------------------
  207.   # ● Weather Restore Store
  208.   #--------------------------------------------------------------------------           
  209.   def weather_restore_store
  210.       w = $game_system.weather_record_set
  211.       weather(w[0],w[1],w[2])      
  212.   end   
  213.   
  214.   #--------------------------------------------------------------------------
  215.   # ● Weather Stop B
  216.   #--------------------------------------------------------------------------           
  217.   def weather_stop_b
  218.       $game_temp.weather_fstop = true
  219.   end
  220.   
  221. end  

  222. #==============================================================================
  223. # ** Spriteset_Map
  224. #==============================================================================
  225. class Spriteset_Map
  226.   
  227.   #--------------------------------------------------------------------------
  228.   # * Create Viewport
  229.   #--------------------------------------------------------------------------
  230.   alias mog_weather_ex_create_viewports create_viewports
  231.   def create_viewports
  232.       create_viewport_weather
  233.       mog_weather_ex_create_viewports      
  234.   end
  235.    
  236.   #--------------------------------------------------------------------------
  237.   # * Create Viewport Weather
  238.   #--------------------------------------------------------------------------
  239.   def create_viewport_weather
  240.       return if @viewport_weather != nil
  241.       @viewport_weather = Viewport.new
  242.       @viewport_weather.z = MOG_WEATHER_EX::WEATHER_SCREEN_Z
  243.       @viewport_weather.ox = ($game_map.display_x * 32)
  244.       @viewport_weather.oy = ($game_map.display_y * 32)
  245.   end
  246.       
  247.   #--------------------------------------------------------------------------
  248.   # * Dispose Viewports
  249.   #--------------------------------------------------------------------------
  250.   alias mog_weather_ex_dispose_viewports dispose_viewports
  251.   def dispose_viewports      
  252.       mog_weather_ex_dispose_viewports
  253.       dispose_viewport_weather
  254.   end
  255.   
  256.   #--------------------------------------------------------------------------
  257.   # * Dispose Viewport Weather
  258.   #--------------------------------------------------------------------------
  259.   def dispose_viewport_weather
  260.       return if @viewport_weather == nil
  261.       @viewport_weather.dispose   
  262.   end
  263.    
  264.   #--------------------------------------------------------------------------
  265.   # * Update Viewports
  266.   #--------------------------------------------------------------------------
  267.   alias mog_weather_ex_update_viewports update_viewports
  268.   def update_viewports
  269.       mog_weather_ex_update_viewports
  270.       update_viewport_weather
  271.   end
  272.   
  273.   #--------------------------------------------------------------------------
  274.   # * Update Viewports Weather
  275.   #--------------------------------------------------------------------------
  276.   def update_viewport_weather
  277.       return if @viewport_weather == nil
  278.       @viewport_weather.ox = ($game_map.display_x * 32)
  279.       @viewport_weather.oy = ($game_map.display_y * 32)
  280.   end     
  281.   
  282. end

  283. #==============================================================================
  284. # ** Spriteset_Battle
  285. #==============================================================================
  286. class Spriteset_Battle
  287.   
  288.   #--------------------------------------------------------------------------
  289.   # * Create Viewport
  290.   #--------------------------------------------------------------------------
  291.   alias mog_weather_ex_create_viewports_battle create_viewports
  292.   def create_viewports
  293.       mog_weather_ex_create_viewports_battle
  294.       create_viewport_weather   
  295.   end
  296.    
  297.   #--------------------------------------------------------------------------
  298.   # * Create Viewport Weather
  299.   #--------------------------------------------------------------------------
  300.   def create_viewport_weather
  301.       return if @viewport_weather != nil
  302.       @viewport_weather = Viewport.new
  303.       @viewport_weather.z = MOG_WEATHER_EX::WEATHER_SCREEN_Z
  304.   end
  305.    
  306.   #--------------------------------------------------------------------------
  307.   # * Dispose Viewports
  308.   #--------------------------------------------------------------------------
  309.   alias mog_weather_ex_dispose_viewports_battle dispose_viewports
  310.   def dispose_viewports      
  311.       mog_weather_ex_dispose_viewports_battle
  312.       dispose_viewport_weather
  313.   end
  314.   
  315.   #--------------------------------------------------------------------------
  316.   # * Dispose Viewport Weather
  317.   #--------------------------------------------------------------------------
  318.   def dispose_viewport_weather
  319.       return if @viewport_weather == nil
  320.       @viewport_weather.dispose   
  321.   end
  322.    
  323.   #--------------------------------------------------------------------------
  324.   # * Update Viewports
  325.   #--------------------------------------------------------------------------
  326.   alias mog_weather_ex_update_viewports_battle update_viewports
  327.   def update_viewports
  328.       mog_weather_ex_update_viewports_battle
  329.       update_viewport_weather        
  330.   end  
  331.   
  332.   #--------------------------------------------------------------------------
  333.   # * Update Viewports Weather
  334.   #--------------------------------------------------------------------------
  335.   def update_viewport_weather
  336.       return if @viewport_weather == nil
  337.   end   
  338.   
  339. end

  340. #==============================================================================
  341. # ■ Weather_EX
  342. #==============================================================================
  343. class Weather_EX
  344.   
  345.   #--------------------------------------------------------------------------
  346.   # ● Initialize
  347.   #--------------------------------------------------------------------------  
  348.   def initialize(viewport = nil ,type = 0, image_name = "",index = 0,nx,ny)
  349.       @wp = Sprite.new
  350.       @wp.bitmap = Cache.weather(image_name.to_s)
  351.       @wp.opacity = 0
  352.       @wp.viewport = viewport
  353.       @cw = @wp.bitmap.width
  354.       @cwm = (@cw / 2) + @cw
  355.       @ch = @wp.bitmap.height
  356.       @chm = (@ch / 2) + @ch
  357.       @range_x = [-@cwm,Graphics.width + @cwm]
  358.       @range_y = [-@chm,Graphics.height + @chm]
  359.       @angle_speed = 0
  360.       @x_speed = 0
  361.       @y_speed = 0
  362.       @zoom_speed = 0
  363.       @opacity_speed = 0
  364.       @type = type
  365.       @index = index
  366.       @nx = 0
  367.       @nx_old = 0
  368.       @ny = 0
  369.       @ny_old = 0      
  370.       @old_nx = nx
  371.       @old_ny = ny
  372.       type_setup(nx,ny)
  373.   end
  374.   
  375.   #--------------------------------------------------------------------------
  376.   # ● x
  377.   #--------------------------------------------------------------------------      
  378.   def x
  379.       @wp.x
  380.   end
  381.   
  382.   #--------------------------------------------------------------------------
  383.   # ● y
  384.   #--------------------------------------------------------------------------      
  385.   def y
  386.       @wp.y
  387.   end
  388.   
  389.   #--------------------------------------------------------------------------
  390.   # ● Opacity
  391.   #--------------------------------------------------------------------------      
  392.   def opacity
  393.       @wp.opacity
  394.   end
  395.   
  396.   #--------------------------------------------------------------------------
  397.   # ● Angle
  398.   #--------------------------------------------------------------------------      
  399.   def angle
  400.       @wp.angle
  401.   end
  402.   
  403.   #--------------------------------------------------------------------------
  404.   # ● Zoom X
  405.   #--------------------------------------------------------------------------      
  406.   def zoom_x
  407.       @wp.zoom_x
  408.   end  
  409.   
  410.   #--------------------------------------------------------------------------
  411.   # ● Dispose Weather
  412.   #--------------------------------------------------------------------------      
  413.   def dispose_weather
  414.       return if @wp == nil
  415.       @wp.bitmap.dispose
  416.       @wp.dispose
  417.       @wp = nil
  418.   end
  419.   
  420.   #--------------------------------------------------------------------------
  421.   # ● Pre Values
  422.   #--------------------------------------------------------------------------   
  423.   def pre_values(index)
  424.       return if  $game_temp.weather_ex_set[index] == nil
  425.       @wp.x = $game_temp.weather_ex_set[index][0]
  426.       @wp.y = $game_temp.weather_ex_set[index][1]
  427.       @wp.opacity = 1#$game_temp.weather_ex_set[index][2]
  428.       @wp.angle = $game_temp.weather_ex_set[index][3]
  429.       @wp.zoom_x = $game_temp.weather_ex_set[index][4]
  430.       @wp.zoom_y = $game_temp.weather_ex_set[index][4]
  431.       $game_temp.weather_ex_set[index].clear
  432.       $game_temp.weather_ex_set[index] = nil
  433.   end  
  434.   
  435.   #--------------------------------------------------------------------------
  436.   # ● Type Setup
  437.   #--------------------------------------------------------------------------      
  438.   def type_setup(nx = 0, ny = 0)
  439.       @cw2 = [@range_x[1] + nx, @range_x[0] + nx]
  440.       @ch2 = [@range_y[1] + ny, @range_y[0] + ny]
  441.       check_weather_type
  442.       pre_values(@index)
  443.       @opacity_speed = -1 if $game_temp.weather_fade
  444.   end
  445.   
  446.   #--------------------------------------------------------------------------
  447.   # ● Update
  448.   #--------------------------------------------------------------------------   
  449.   def update_weather(nx = 0, ny = 0)
  450.       @wp.x += @x_speed
  451.       @wp.y += @y_speed
  452.       @wp.opacity += @opacity_speed
  453.       @wp.angle += @angle_speed
  454.       @wp.zoom_x += @zoom_speed
  455.       @wp.zoom_y += @zoom_speed
  456.       check_loop_map(nx,ny)
  457.       type_setup(nx,ny) if can_reset_setup?
  458.   end  

  459.   #--------------------------------------------------------------------------
  460.   # ● Check Loop Map
  461.   #--------------------------------------------------------------------------        
  462.   def check_loop_map(nx,ny)
  463.       if (@old_nx - nx).abs > 32
  464.          @cw2 = [@range_x[1] + nx, @range_x[0] + nx]
  465.          @wp.x += nx
  466.          @wp.x -= @old_nx if nx == 0
  467.       end   
  468.       if (@old_ny - ny).abs > 32
  469.          @ch2 = [@range_y[1] + ny, @range_y[0] + ny]
  470.          @wp.y += ny
  471.          @wp.y -= @old_ny if ny == 0
  472.       end         
  473.       @old_nx = nx
  474.       @old_ny = ny   
  475.   end  
  476.    
  477.   #--------------------------------------------------------------------------
  478.   # ● Can Reset Setup
  479.   #--------------------------------------------------------------------------      
  480.   def can_reset_setup?
  481.       return true if @wp.x > @cw2[0] or @wp.x <  @cw2[1]
  482.       return true if @wp.y > @ch2[0]  or @wp.y < @ch2[1]
  483.       return true if @wp.opacity == 0
  484.       return true if @wp.zoom_x > 2.0 or @wp.zoom_x < 0.5
  485.       return false
  486.   end
  487.   
  488. #--------------------------------------------------------------------------
  489. # ● Check Weather Type
  490. #--------------------------------------------------------------------------                        
  491. def check_weather_type
  492.      case @type
  493.          when 0;   rain
  494.          when 1;   wind   
  495.          when 2;   fog
  496.          when 3;   light
  497.          when 4;   snow
  498.          when 5;   spark
  499.          when 6;   random                  
  500.       end
  501. end
  502.    
  503. #--------------------------------------------------------------------------
  504. # ● Snow
  505. #--------------------------------------------------------------------------                          
  506. def snow
  507.      @wp.angle = rand(360)
  508.      @wp.x = rand(@cw2[0])
  509.      @wp.y = rand(@ch2[0])
  510.      @wp.opacity = 1
  511.      @wp.zoom_x = (rand(100) + 50) / 100.0
  512.      @wp.zoom_y = @wp.zoom_x
  513.      @y_speed = [[rand(5), 1].max, 5].min
  514.      @opacity_speed = 5
  515.      @angle_speed = rand(3)
  516. end   

  517. #--------------------------------------------------------------------------
  518. # ● Spark
  519. #--------------------------------------------------------------------------                           
  520. def spark
  521.      @wp.angle = rand(360)
  522.      @wp.x = rand(@cw2[0])
  523.      @wp.y = rand(@ch2[0])
  524.      @wp.opacity = 1
  525.      @wp.zoom_x = (rand(100) + 100) / 100.0
  526.      @wp.zoom_y = @wp.zoom_x
  527.      @wp.blend_type = 1     
  528.      @opacity_speed = 10
  529.      @zoom_speed = -0.01
  530. end

  531. #--------------------------------------------------------------------------
  532. # ● Rain
  533. #--------------------------------------------------------------------------                          
  534. def rain
  535.      @wp.x = rand(@cw2[0])      
  536.      if @start == nil
  537.         @wp.y = rand(@ch2[0])
  538.         @start = true
  539.      else
  540.         @wp.y = @ch2[1]        
  541.      end   
  542.      @wp.opacity = 1
  543.      @wp.zoom_y = (rand(50) + 100) / 100.0
  544.      @wp.zoom_x = (rand(25) + 100) / 100.0
  545.      @y_speed = [[rand(10) + 10, 10].max, 20].min
  546.      @opacity_speed = 10
  547. end   

  548. #--------------------------------------------------------------------------
  549. # ● Fog
  550. #--------------------------------------------------------------------------                           
  551. def fog
  552.      rand_angle = rand(2)
  553.      @wp.angle = rand_angle == 1 ? 180 : 0
  554.      @wp.x = rand(@cw2[0])
  555.      @wp.y = rand(@ch2[0])
  556.      @wp.opacity = 1
  557.      @wp.zoom_x = (rand(100) + 50) / 100.0
  558.      @wp.zoom_y = @wp.zoom_x
  559.      @x_speed = [[rand(10), 1].max, 10].min
  560.      @opacity_speed = 10
  561. end

  562. #--------------------------------------------------------------------------
  563. # ● Light
  564. #--------------------------------------------------------------------------                           
  565. def light
  566.      @wp.angle = rand(360)
  567.      @wp.x = rand(@cw2[0])
  568.      @wp.y = rand(@ch2[0])
  569.      @wp.opacity = 1
  570.      @wp.zoom_x = (rand(100) + 50) / 100.0
  571.      @wp.zoom_y = @wp.zoom_x
  572.      @wp.blend_type = 1
  573.      @angle_speed = [[rand(3), 1].max, 3].min
  574.      @y_speed = -[[rand(10), 1].max, 10].min
  575.      @opacity_speed = 2
  576. end

  577. #--------------------------------------------------------------------------
  578. # ● Wind
  579. #--------------------------------------------------------------------------                          
  580. def wind
  581.      @wp.angle = rand(360)
  582.      @wp.x = rand(@cw2[0])
  583.      @wp.y = rand(@ch2[0])
  584.      @wp.opacity = 1
  585.      @wp.zoom_x = (rand(100) + 50) / 100.0
  586.      @wp.zoom_y = @wp.zoom_x
  587.      @x_speed = [[rand(10), 1].max, 10].min
  588.      @y_speed = [[rand(10), 1].max, 10].min
  589.      @opacity_speed = 10
  590. end   
  591.       
  592. #--------------------------------------------------------------------------
  593. # ● Random
  594. #--------------------------------------------------------------------------                          
  595. def random
  596.      @wp.angle = rand(360)
  597.      @wp.x = rand(@cw2[0])
  598.      @wp.y = rand(@ch2[0])
  599.      @wp.opacity = 1
  600.      @wp.zoom_x = (rand(100) + 50) / 100.0
  601.      @wp.zoom_y = @wp.zoom_x
  602.      x_s = [[rand(10), 1].max, 10].min
  603.      y_s = [[rand(10), 1].max, 10].min
  604.      rand_x = rand(2)
  605.      rand_y = rand(2)
  606.      @x_speed = rand_x == 1 ? x_s : -x_s
  607.      @y_speed = rand_y == 1 ? y_s : -y_s      
  608.      @opacity_speed = 10
  609. end   

  610. end

  611. #==============================================================================
  612. # ■ Module Weather EX
  613. #==============================================================================
  614. module Module_Weather_EX
  615.   
  616. #--------------------------------------------------------------------------
  617. # ● Create Weather EX
  618. #--------------------------------------------------------------------------                  
  619.   def create_weather_ex
  620.       dispose_weather_ex
  621.       create_weather_sprite     
  622.   end
  623.   
  624. #--------------------------------------------------------------------------
  625. # ● Dispose Wheater EX
  626. #--------------------------------------------------------------------------                     
  627.   def dispose_weather_ex
  628.       dispose_weather_ex_sprite
  629.   end

  630. #--------------------------------------------------------------------------
  631. # ● Create Weather Sprite
  632. #--------------------------------------------------------------------------                       
  633.   def create_weather_sprite
  634.       dispose_weather_ex_sprite
  635.       @old_weather = $game_system.weather
  636.       return if $game_system.weather == [] or $game_system.weather[0] == -1
  637.       @weather_ex = []
  638.       @weather_oxy = [$game_map.display_x * 32,
  639.                       $game_map.display_y * 32]      
  640.       index = 0
  641.       power_efic = MOG_WEATHER_EX::WEATHER_POWER_EFIC
  642.       power_efic = 1 if power_efic < 1
  643.       power = [[$game_system.weather[1] * power_efic, power_efic].max, 999].min
  644.       for i in 0...power
  645.           @weather_ex.push(Weather_EX.new(@viewport_weather,$game_system.weather[0],$game_system.weather[2],index, @viewport1.ox, @viewport1.oy))
  646.           index += 1
  647.       end            
  648.   end
  649.   
  650. #--------------------------------------------------------------------------
  651. # ● Dispose Weather EX
  652. #--------------------------------------------------------------------------                  
  653.   def dispose_weather_ex_sprite
  654.       return if @weather_ex == nil
  655.       index = 0
  656.       for i in @weather_ex
  657.           $game_temp.weather_ex_set[index] = [] if $game_temp.weather_ex_set[index] == nil
  658.           $game_temp.weather_ex_set[index].push(i.x,i.y,i.opacity,i.angle,i.zoom_x)
  659.           i.dispose_weather
  660.           index += 1
  661.       end
  662.       @weather_ex.each {|sprite| sprite.dispose_weather}  
  663.       @weather_ex = nil
  664.   end
  665.   
  666. #--------------------------------------------------------------------------
  667. # ● Dispose Refresh
  668. #--------------------------------------------------------------------------                    
  669.   def dispose_refresh
  670.       $game_temp.weather_ex_set.clear
  671.       return if @weather_ex == nil
  672.       @weather_ex.each {|sprite| sprite.dispose_weather}
  673.       @weather_ex = nil
  674.   end  
  675.   
  676. #--------------------------------------------------------------------------
  677. # ● Update Weather EX
  678. #--------------------------------------------------------------------------                  
  679.   def update_weather_ex
  680.       $game_temp.weather_rf_time -= 1 if $game_temp.weather_rf_time > 0
  681.       refresh_weather_ex if $game_temp.weather_rf_time == 0
  682.       return if @weather_ex == nil
  683.       @weather_ex.each {|sprite| sprite.update_weather(@viewport_weather.ox,@viewport_weather.oy)}
  684.   end
  685.   
  686. #--------------------------------------------------------------------------
  687. # ● Refresh Weather EX
  688. #--------------------------------------------------------------------------                     
  689.   def refresh_weather_ex
  690.       return if @old_weather == nil
  691.       return if @old_weather == $game_system.weather
  692.       dispose_refresh      
  693.       create_weather_sprite
  694.   end  
  695.    
  696. end  

  697. #==============================================================================
  698. # ■ Spriteset Map
  699. #==============================================================================
  700. class Spriteset_Map
  701.    include Module_Weather_EX  
  702.    
  703. #--------------------------------------------------------------------------
  704. # ● Initialize
  705. #--------------------------------------------------------------------------                  
  706.   alias mog_weather_ex_initialize initialize
  707.   def initialize
  708.       dispose_weather_ex   
  709.       mog_weather_ex_initialize
  710.       create_weather_ex
  711.   end

  712. #--------------------------------------------------------------------------
  713. # ● Dispose
  714. #--------------------------------------------------------------------------                  
  715.   alias mog_weather_ex_dispose dispose
  716.   def dispose
  717.       dispose_weather_ex   
  718.       mog_weather_ex_dispose
  719.   end  

  720. #--------------------------------------------------------------------------
  721. # ● Update
  722. #--------------------------------------------------------------------------                  
  723.   alias mog_weather_ex_update update
  724.   def update
  725.       mog_weather_ex_update
  726.       update_weather_ex
  727.   end  
  728.    
  729. end

  730. if MOG_WEATHER_EX::WEATHER_BATTLE
  731. #==============================================================================
  732. # ■ Spriteset Battle
  733. #==============================================================================
  734. class Spriteset_Battle
  735.   
  736.    include Module_Weather_EX  
  737.    
  738. #--------------------------------------------------------------------------
  739. # ● Initialize
  740. #--------------------------------------------------------------------------                  
  741.   alias mog_weather_ex_initialize initialize
  742.   def initialize
  743.       dispose_weather_ex   
  744.       mog_weather_ex_initialize
  745.       create_weather_ex
  746.   end

  747. #--------------------------------------------------------------------------
  748. # ● Dispose
  749. #--------------------------------------------------------------------------                  
  750.   alias mog_weather_ex_dispose dispose
  751.   def dispose
  752.       mog_weather_ex_dispose
  753.       dispose_weather_ex
  754.   end  

  755. #--------------------------------------------------------------------------
  756. # ● Update
  757. #--------------------------------------------------------------------------                  
  758.   alias mog_weather_ex_update update
  759.   def update
  760.       mog_weather_ex_update
  761.       update_weather_ex
  762.   end   
  763.    
  764. end

  765. end

  766. #=============================================================================
  767. # ■ Scene Base
  768. #=============================================================================
  769. class Scene_Base
  770.   
  771.   #--------------------------------------------------------------------------
  772.   # ● Weather Recover Data
  773.   #--------------------------------------------------------------------------  
  774.   def weather_recover_data
  775.       if $game_system.weather.empty? or
  776.           $game_system.weather[0] == -1
  777.           if !$game_system.weather_restore.empty? and
  778.              $game_system.weather_restore[0] != -1
  779.              v = $game_system.weather_restore
  780.              $game_system.weather = [v[0],v[1],v[2]]
  781.           end
  782.       end         
  783.   end
  784.   
  785.   #--------------------------------------------------------------------------
  786.   # ● Weather Restore
  787.   #--------------------------------------------------------------------------      
  788.   def weather_recover_scene
  789.       return if $game_system.weather_temp.empty?
  790.       return if $game_system.weather_temp[0] == -1
  791.       w = $game_system.weather_temp
  792.       $game_system.weather = [w[0],w[1],w[2]]
  793.       $game_system.weather_temp.clear
  794.       $game_system.weather_temp = [-1,0,""]
  795.   end  

  796.   #--------------------------------------------------------------------------
  797.   # ● Main
  798.   #--------------------------------------------------------------------------         
  799.   alias mog_weather_ex_main main
  800.   def main
  801.       dispose_weather_ex_base
  802.       weather_recover_scene if can_recover_weather_scene?
  803.       mog_weather_ex_main
  804.   end   
  805.   
  806.   #--------------------------------------------------------------------------
  807.   # ● Can Recover Weather Scene
  808.   #--------------------------------------------------------------------------         
  809.   def can_recover_weather_scene?
  810.       return true if SceneManager.scene_is?(Scene_Map)
  811.       return true if SceneManager.scene_is?(Scene_Battle)
  812.       return false
  813.   end  
  814.   
  815.   #--------------------------------------------------------------------------
  816.   # ● terminate
  817.   #--------------------------------------------------------------------------         
  818.   alias mog_weather_ex_terminate_base terminate
  819.   def terminate
  820.       mog_weather_ex_terminate_base
  821.       dispose_weather_ex_base      
  822.   end  

  823.   #--------------------------------------------------------------------------
  824.   # ● Dispose Weather EX Base
  825.   #--------------------------------------------------------------------------           
  826.   def dispose_weather_ex_base
  827.       return if @spriteset == nil
  828.       @spriteset.dispose_weather_ex rescue nil
  829.   end        
  830.   
  831. end

  832. #=============================================================================
  833. # ■ Sprite Battle
  834. #=============================================================================
  835. class Spriteset_Battle  

  836.   #--------------------------------------------------------------------------
  837.   # ● Dispose
  838.   #--------------------------------------------------------------------------           
  839.   alias mog_weather_ex_aft_dispose dispose
  840.   def dispose
  841.       force_stop_weather_ex_after_battle
  842.       mog_weather_ex_aft_dispose
  843.   end

  844.   #--------------------------------------------------------------------------
  845.   # ● Force Stop Weather EX After
  846.   #--------------------------------------------------------------------------           
  847.   def force_stop_weather_ex_after_battle
  848.       return if !$game_temp.weather_fstop
  849.       $game_temp.weather_fstop = false
  850.       $game_temp.weather_fade = false
  851.       $game_system.weather.clear
  852.       $game_system.weather = [-1,0,""]
  853.       $game_system.weather_restore  = [-1,0,""]
  854.       $game_system.weather_temp = [-1,0,""]      
  855.   end
  856.    
  857.   
  858. end

  859. #=============================================================================
  860. # ■ Scene Load
  861. #=============================================================================
  862. class Scene_Load < Scene_File
  863.   
  864.   #--------------------------------------------------------------------------
  865.   # ● On Load Success
  866.   #--------------------------------------------------------------------------
  867.   alias mog_weather_ex_on_load_success on_load_success
  868.   def on_load_success
  869.       mog_weather_ex_on_load_success
  870.       weather_recover_data
  871.   end
  872. end

  873. #=============================================================================
  874. # ■ Scene Manager
  875. #=============================================================================
  876. class << SceneManager
  877.   
  878.   #--------------------------------------------------------------------------
  879.   # ● Call
  880.   #--------------------------------------------------------------------------         
  881.   alias mog_weather_ex_call call
  882.   def call(scene_class)
  883.       weather_dispose
  884.       mog_weather_ex_call(scene_class)
  885.   end
  886.   
  887.   #--------------------------------------------------------------------------
  888.   # ● Weather Restore
  889.   #--------------------------------------------------------------------------      
  890.   def weather_dispose
  891.       return if $game_system.weather.empty?
  892.       return if $game_system.weather[0] == -1
  893.       w = $game_system.weather
  894.       $game_system.weather_temp = [w[0],w[1],w[2]]
  895.       $game_system.weather.clear
  896.       $game_system.weather = [-1,0,""]
  897.   end   
  898.   
  899. end
复制代码
可以使用原作者是Mog Hunter的 MOG - Weather EX脚本来实现(上面的那个脚本就是了),这个脚本现在在论坛上貌似找不到了。
附件是所需的素材,解压后放进\Graphics 目录。
Weather.rar (184.65 KB, 下载次数: 55)

然后就可以通过事件里的脚本实现了,具体方法看范例工程。
一个范例.rar (1.61 MB, 下载次数: 58)




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