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

Project1

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

[已经解决] va进入战斗前如何实现这效果。

[复制链接]

Lv2.观梦者

梦石
0
星屑
558
在线时间
377 小时
注册时间
2012-7-10
帖子
1283
跳转到指定楼层
1
发表于 2018-1-17 08:54:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
就是主角头像显示感叹号气泡表情。
然后画面拉进到主角前。
vx有突入的效果脚本,不知va有没有。
太久没有来6R了,都是新面孔啊。
帮忙宣传游戏ing,虽说不常上线。

Lv2.观梦者

梦石
0
星屑
558
在线时间
377 小时
注册时间
2012-7-10
帖子
1283
2
 楼主| 发表于 2018-1-23 07:34:34 | 只看该作者
没人知道吗

点评

网站打开不了呀……  发表于 2018-1-24 12:32
http://woodpenguin.web.fc2.com/rgss3/pre_battle_effect.html 我只知道这个…  发表于 2018-1-23 09:33
太久没有来6R了,都是新面孔啊。
帮忙宣传游戏ing,虽说不常上线。
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
10708
在线时间
922 小时
注册时间
2017-10-10
帖子
25
3
发表于 2018-1-24 16:48:57 | 只看该作者
  1. =begin

  2. ▼ 戦闘切り替えエフェクト ver. 3.0

  3. RPGツクールVXAce用スクリプト

  4. 制作 : 木星ペンギン
  5. URL  : http://woodpenguin.blog.fc2.com/

  6. ------------------------------------------------------------------------------
  7. 概要

  8. □ 戦闘突入時のエフェクトをオリジナルのものにします。
  9.   ・とにかく重いので、適当に調整してください。

  10. □ 【オリジナルサブメニュー】と併用する場合、こちらを下にしてください。

  11. ------------------------------------------------------------------------------
  12. 使い方

  13. □ フェードアウトエフェクト
  14.   マップ画面から暗転までのエフェクトです。
  15.   -1 : 暗転なし。
  16.   0  : 通常のトランジションを行います。
  17.   1  : 新たに設定したトランジションを行います。
  18.   2  : 回転しながらアップになる演出を行います。
  19.   3  : 幻影を残しながら、画面を縮小していきます。
  20.   4  : いったん画面を縮小してから、プレイヤーを拡大します。
  21.   5  : 波形描写を行います。
  22.   6  : 画面を回転させながらぼかし効果を適用します。
  23.   7  : 画面の拡大します。
  24.   8  : 画面が割れて飛び散っていく演出を行います。
  25.   9  : 画面が設定した方向から砕けていく演出を行います。

  26. □ フェードインエフェクト
  27.   暗転した状態から戦闘画面までのエフェクトです。
  28.   0 : 通常のフェードインを行います。
  29.   1 : 通常のトランジションを行います。
  30.   2 : 新たに設定したトランジションを行います。
  31.   3 : 波形描写を行います。
  32.   4 : 画面が割れて飛び散っていく演出を行います。
  33.   5 : 画面が設定した方向から砕けていく演出を行います。
  34.   
  35. =end
  36. module WdTk
  37. module PrBtEff
  38. #//////////////////////////////////////////////////////////////////////////////
  39. #
  40. # 設定項目
  41. #
  42. #//////////////////////////////////////////////////////////////////////////////
  43. =begin #---------------------------------------------------------------------

  44.     ● エフェクト共通の設定項目の説明
  45.       :rate     : エフェクトの更新レートです。
  46.                   数値が大きいほどFPSは下がりますが、処理が軽くなります。
  47.                   1 以上の数値を設定してください。
  48.       :time     : エフェクトにかける時間を設定できます。
  49.                   60 で 1 秒です。
  50.       :fadeout  : 最後にフェードアウトをかける時間です。未設定の場合は30。
  51.       :fadein   : 戦闘開始時にフェードインをかける時間です。未設定の場合は30。
  52.       :color    : フェードアウト時の色です。未設定の場合は黒。
  53.       
  54. =end #-----------------------------------------------------------------------
  55.   OUTEFF = Array.new(10) { {} }
  56.   INEFF  = Array.new(6) { {} }
  57.   #--------------------------------------------------------------------------
  58.   # ● フェードアウト設定
  59.   #     OUT_VARIABLE : 変数を使用するかどうか
  60.   #     OUT_INDEX    :
  61.   #       変数を使用する場合、この番号の変数の値がエフェクトの番号になる。
  62.   #       変数を使用しない場合、この数値がそのままエフェクトの番号になる。
  63.   #--------------------------------------------------------------------------
  64.   OUT_VARIABLE = true
  65.   OUT_INDEX = 2
  66.   
  67.   #--------------------------------------------------------------------------
  68.   # ● フェードアウト : エフェクト 0 の設定
  69.   #     通常のトランジションを行います。
  70.   #--------------------------------------------------------------------------
  71.   # 設定項目  [:time, :color]
  72.   OUTEFF[0][:time] = 60
  73.   
  74.   #--------------------------------------------------------------------------
  75.   # ● フェードアウト : エフェクト 1 の設定
  76.   #     新たに設定したトランジションを行います。
  77.   #     :name : トランジションのファイル名です。
  78.   #--------------------------------------------------------------------------
  79.   # 設定項目  [:time, :color, :name]
  80.   OUTEFF[1][:time] = 30
  81.   OUTEFF[1][:name] = "BattleStart"
  82.   
  83.   #--------------------------------------------------------------------------
  84.   # ● フェードアウト : エフェクト 2 の設定
  85.   #     回転しながらアップになる演出を行います。
  86.   #--------------------------------------------------------------------------
  87.   # 設定項目  [:rate, :time, :fadeout, :color]
  88.   OUTEFF[2][:rate]    = 3
  89.   OUTEFF[2][:time]    = 120
  90.   
  91.   #--------------------------------------------------------------------------
  92.   # ● フェードアウト : エフェクト 3 の設定
  93.   #     幻影を残しながら、画面を縮小していきます。
  94.   #     :dir   : 縮小をする方向です。テンキーの位置で指定します。
  95.   #     :blur  : ブレの強さです。
  96.   #     :angle : 回転角度です。
  97.   #--------------------------------------------------------------------------
  98.   # 設定項目  [:rate, :time, :fadeout, :color, :dir, :blur, :angle]
  99.   OUTEFF[3][:rate]    = 2
  100.   OUTEFF[3][:time]    = 90
  101.   OUTEFF[3][:dir]     = 7
  102.   OUTEFF[3][:blur]    = 16
  103.   OUTEFF[3][:angle]   = 30
  104.   
  105.   #--------------------------------------------------------------------------
  106.   # ● フェードアウト : エフェクト 4 の設定
  107.   #     いったん画面を縮小してから、プレイヤーを拡大します。
  108.   #     :angle : 回転角度です。
  109.   #--------------------------------------------------------------------------
  110.   # 設定項目  [:rate, :time, :fadeout, :color, :angle]
  111.   OUTEFF[4][:rate]    = 3
  112.   OUTEFF[4][:time]    = 120
  113.   OUTEFF[4][:angle]   = 30
  114.   
  115.   #--------------------------------------------------------------------------
  116.   # ● フェードアウト : エフェクト 5 の設定
  117.   #     波形描写を行います。
  118.   #     :amp    : 波形の振幅です。
  119.   #     :length : 波形の周期です。
  120.   #--------------------------------------------------------------------------
  121.   # 設定項目  [:rate, :time, :fadeout, :color, :amp, :length]
  122.   OUTEFF[5][:rate]    = 1
  123.   OUTEFF[5][:time]    = 120
  124.   OUTEFF[5][:amp]     = 64
  125.   OUTEFF[5][:length]  = 60
  126.   
  127.   #--------------------------------------------------------------------------
  128.   # ● フェードアウト : エフェクト 6 の設定
  129.   #     画面を回転させながらぼかし効果を適用します。
  130.   #--------------------------------------------------------------------------
  131.   # 設定項目  [:rate, :time, :fadeout, :color]
  132.   OUTEFF[6][:rate]    = 4
  133.   OUTEFF[6][:time]    = 100
  134.   
  135.   #--------------------------------------------------------------------------
  136.   # ● フェードアウト : エフェクト 7 の設定
  137.   #     画面の拡大します。
  138.   #--------------------------------------------------------------------------
  139.   # 設定項目  [:rate, :time, :fadeout, :color]
  140.   OUTEFF[7][:rate]    = 1
  141.   OUTEFF[7][:time]    = 12
  142.   OUTEFF[7][:fadeout] = 10
  143.   OUTEFF[7][:color]   = Color.new(255, 255, 255)
  144.   
  145.   #--------------------------------------------------------------------------
  146.   # ● フェードアウト : エフェクト 8 の設定
  147.   #     画面が割れて飛び散っていく演出を行います。
  148.   #     :side   : 画面を横に分割する数です。縦も同じ長さに設定されます。
  149.   #--------------------------------------------------------------------------
  150.   # 設定項目  [:rate, :time, :fadeout, :color, :side]
  151.   OUTEFF[8][:rate]    = 1
  152.   OUTEFF[8][:time]    = 180
  153.   OUTEFF[8][:side]    = 12
  154.   
  155.   #--------------------------------------------------------------------------
  156.   # ● フェードアウト : エフェクト 9 の設定
  157.   #     画面が設定した方向から砕けていく演出を行います。
  158.   #     :side   : 画面を横に分割する数です。縦も同じ長さに設定されます。
  159.   #     :dir    : 画面が砕けていく方向。テンキーの位置(2, 4, 6, 8)で指定します。
  160.   #--------------------------------------------------------------------------
  161.   # 設定項目  [:rate, :time, :fadeout, :color, :side, :dir]
  162.   OUTEFF[9][:rate]    = 1
  163.   OUTEFF[9][:time]    = 100
  164.   OUTEFF[9][:side]    = 17
  165.   OUTEFF[9][:dir]     = 4
  166.   
  167.   
  168.   #--------------------------------------------------------------------------
  169.   # ● フェードイン設定
  170.   #     IN_VARIABLE : 変数を使用するかどうか
  171.   #     IN_INDEX    :
  172.   #       変数を使用する場合、この番号の変数の値がエフェクトの番号になる。
  173.   #       変数を使用しない場合、この数値がそのままエフェクトの番号になる。
  174.   #--------------------------------------------------------------------------
  175.   IN_VARIABLE = true
  176.   IN_INDEX = 3
  177.   
  178.   #--------------------------------------------------------------------------
  179.   # ● フェードイン : エフェクト 0 の設定
  180.   #     通常のフェードインを行います。
  181.   #--------------------------------------------------------------------------
  182.   # 設定項目  [:time]
  183.   INEFF[0][:time] = 10
  184.   
  185.   #--------------------------------------------------------------------------
  186.   # ● フェードイン : エフェクト 1 の設定
  187.   #     通常のトランジションを行います。
  188.   #--------------------------------------------------------------------------
  189.   # 設定項目  [:time]
  190.   INEFF[1][:time] = 15
  191.   
  192.   #--------------------------------------------------------------------------
  193.   # ● フェードイン : エフェクト 2 の設定
  194.   #     新たに設定したトランジションを行います。
  195.   #     :name : トランジションのファイル名です。
  196.   #--------------------------------------------------------------------------
  197.   # 設定項目  [:time, :name]
  198.   INEFF[2][:time] = 15
  199.   INEFF[2][:name] = "BattleStart"
  200.   
  201.   #--------------------------------------------------------------------------
  202.   # ● フェードイン : エフェクト 3 の設定
  203.   #     波形描写を行います。
  204.   #     :amp    : 波形の振幅です。
  205.   #     :length : 波形の周期です。
  206.   #--------------------------------------------------------------------------
  207.   # 設定項目  [:rate, :time, :fadein, :color, :amp, :length]
  208.   INEFF[3][:rate]   = 1
  209.   INEFF[3][:time]   = 80
  210.   INEFF[3][:amp]    = 64
  211.   INEFF[3][:length] = 60
  212.   
  213.   #--------------------------------------------------------------------------
  214.   # ● フェードイン : エフェクト 4 の設定
  215.   #     画面が割れて飛び散っていく演出を行います。
  216.   #     :side   : 画面を横に分割する数です。縦も同じ長さに設定されます。
  217.   #--------------------------------------------------------------------------
  218.   # 設定項目  [:rate, :time, :fadein, :color, :side]
  219.   INEFF[4][:rate]   = 1
  220.   INEFF[4][:time]   = 150
  221.   INEFF[4][:fadein] = 150
  222.   INEFF[4][:side]   = 12
  223.   
  224.   #--------------------------------------------------------------------------
  225.   # ● フェードイン : エフェクト 5 の設定
  226.   #     画面が設定した方向から砕けていく演出を行います。
  227.   #     :side   : 画面を横に分割する数です。縦も同じ長さに設定されます。
  228.   #     :dir    : 画面が砕けていく方向。テンキーの位置(2, 4, 6, 8)で指定します。
  229.   #--------------------------------------------------------------------------
  230.   # 設定項目  [:rate, :time, :fadein, :color, :side, :dir]
  231.   INEFF[5][:rate]   = 1
  232.   INEFF[5][:time]   = 100
  233.   INEFF[5][:fadein] = 100
  234.   INEFF[5][:side]   = 17
  235.   INEFF[5][:dir]    = 4
  236.   
  237.   
  238. #//////////////////////////////////////////////////////////////////////////////
  239. #
  240. # 以降、変更する必要なし
  241. #
  242. #//////////////////////////////////////////////////////////////////////////////

  243.   def self.snapshot_for_effect
  244.     @effect_bitmap = Graphics.snap_to_bitmap
  245.   end
  246.   def self.dispose_effect_bitmap
  247.     @effect_bitmap.dispose if @effect_bitmap
  248.     @effect_bitmap = nil
  249.   end
  250.   #--------------------------------------------------------------------------
  251.   # ● ビューポートの作成
  252.   #--------------------------------------------------------------------------
  253.   def self.create_main_viewport
  254.     @viewport = Viewport.new
  255.     @viewport.z = 500
  256.   end
  257.   #--------------------------------------------------------------------------
  258.   # ● ビューポートの解放
  259.   #--------------------------------------------------------------------------
  260.   def self.dispose_main_viewport
  261.     @viewport.dispose
  262.     @viewport = nil
  263.   end
  264.   #--------------------------------------------------------------------------
  265.   # ● フレーム更新(フェードアウト用)
  266.   #--------------------------------------------------------------------------
  267.   def self.update_fadeout(i, d)
  268.     Graphics.update
  269.     @viewport.color.alpha = 255 - 255 * (180 - i) / d if d > 0
  270.     @viewport.update
  271.   end
  272.   #--------------------------------------------------------------------------
  273.   # ● フレーム更新(フェードイン用)
  274.   #--------------------------------------------------------------------------
  275.   def self.update_fadein(i, d)
  276.     @viewport2.color.alpha = 255 - 255 * i / d if d > 0
  277.     Graphics.update
  278.   end
  279.   #--------------------------------------------------------------------------
  280.   # ● フェードアウト実行
  281.   #--------------------------------------------------------------------------
  282.   def self.perform_fadeout
  283.     index = OUT_VARIABLE ? $game_variables[OUT_INDEX] : OUT_INDEX
  284.     params = OUTEFF[index]
  285.     return fadeout_transition({}) unless params
  286.     return if index < 0
  287.     return fadeout_transition(params) if index == 0 || index == 1
  288.     create_main_viewport
  289.     @viewport.color.set(params[:color]) if params[:color]
  290.     @viewport.color.alpha = 0
  291.     effect_sprites = []
  292.     Graphics.transition(0)
  293.     Graphics.frame_rate = 60 / params[:rate]
  294.     step = params[:rate] * 180.0 / params[:time]
  295.     dur = 180 * (params[:fadeout] || 30) / params[:time]
  296.     case index
  297.     when 2
  298.       0.step(180, step) do |i|
  299.         sprite = make_effect_sprite1
  300.         sprite.angle = 2 * i
  301.         sprite.opacity = (i == 0 ? 255 : params[:rate] * 8 + 8)
  302.         update_effect_size(sprite, 1.0 + 0.01 * i)
  303.         effect_sprites << sprite
  304.         update_fadeout(i, dur)
  305.       end
  306.     when 3
  307.       type = params[:dir] - 1
  308.       tx = Graphics.width  * (type % 3 == 0 ? 1 : type % 3 == 2 ? 5 : 3) / 6
  309.       ty = Graphics.height * (type / 3 == 0 ? 5 : type / 3 == 2 ? 1 : 3) / 6
  310.       opacity = params[:rate] * 8 + 16
  311.       0.step(180, step) do |i|
  312.         if effect_sprites.size > params[:blur]
  313.           sprite = effect_sprites.shift
  314.         else
  315.           sprite = make_effect_sprite1
  316.         end
  317.         sprite.x = Graphics.width / 2 - (Graphics.width / 2 - tx) * i / 180
  318.         sprite.y = Graphics.height / 2 - (Graphics.height / 2 - ty) * i / 180
  319.         sprite.z = i
  320.         sprite.angle = params[:angle] * i / 180
  321.         d = (i > 90 ? (180 - i) : 90)
  322.         sprite.opacity = (255 - i) * d / 90
  323.         effect_sprites.last.opacity = opacity * d / 90 unless effect_sprites.empty?
  324.         update_effect_size(sprite, 0.2 + 0.8 * (180 - i) ** 2 / 180 ** 2)
  325.         effect_sprites << sprite
  326.         update_fadeout(i, dur)
  327.       end
  328.     when 4
  329.       tx = $game_player.screen_x
  330.       ty = $game_player.screen_y - 20
  331.       opacity = params[:rate] * 8 + 8
  332.       0.step(180, step) do |i|
  333.         sprite = make_effect_sprite1
  334.         sprite.x = tx + (Graphics.width / 2 - tx) * i / 180
  335.         sprite.y = ty + (Graphics.height / 2 - ty) * i / 180
  336.         sprite.z = i
  337.         sprite.ox = tx
  338.         sprite.oy = ty
  339.         sprite.angle = params[:angle] * i / 180
  340.         sprite.opacity = (i == 0 ? 255 : opacity)
  341.         m = 60 ** 2 - 30 ** 2 + (30 - i) ** 2
  342.         update_effect_size(sprite, 1.0 * m / 60 ** 2, 1.2)
  343.         effect_sprites << sprite
  344.         update_fadeout(i, dur)
  345.       end
  346.     when 5
  347.       effect_sprites << make_effect_sprite1 << make_effect_sprite1
  348.       effect_sprites[1].opacity = 64
  349.       effect_sprites[1].wave_length = params[:length]
  350.       0.step(180, step) do |i|
  351.         d = 180 ** 2 - (180 - i) ** 2
  352.         effect_sprites[1].wave_amp = params[:amp] * d / 180 ** 2
  353.         effect_sprites[1].wave_speed = i * 5
  354.         effect_sprites[1].opacity += 1
  355.         effect_sprites[1].update
  356.         update_fadeout(i, dur)
  357.       end
  358.     when 6
  359.       effect_sprites << make_effect_sprite1
  360.       0.step(180, step) do |i|
  361.         @effect_bitmap.radial_blur(i / 3, 1)
  362.         update_fadeout(i, dur)
  363.       end
  364.     when 7
  365.       effect_sprites << make_effect_sprite1
  366.       0.step(180, step) do |i|
  367.         sprite = make_effect_sprite1
  368.         sprite.opacity = 32
  369.         sprite.zoom_x = sprite.zoom_y = 1.0 + 2.0 * i / 180
  370.         effect_sprites << sprite
  371.         update_fadeout(i, dur)
  372.       end
  373.     when 8
  374.       effect_data = {}
  375.       max = 32 * params[:time] / 180
  376.       make_break_sprites1(params[:side]).each do |sprite|
  377.         effect_sprites << sprite
  378.         effect_data[sprite] = make_effect_data1(sprite, max)
  379.       end
  380.       Graphics.wait(8)
  381.       0.step(180, step) do |i|
  382.         update_break_effect1(effect_data, params[:time], i)
  383.         update_fadeout(i, dur)
  384.       end
  385.     when 9
  386.       effect_data = {}
  387.       max = 24 * params[:time] / 180
  388.       make_break_sprites1(params[:side]).each do |sprite|
  389.         effect_sprites << sprite
  390.         effect_data[sprite] = make_effect_data2(sprite, max, params[:dir])
  391.       end
  392.       0.step(180, step) do |i|
  393.         update_break_effect2(effect_data, i, params[:dir])
  394.         update_fadeout(i, dur)
  395.       end
  396.     end
  397.     snapshot_for_effect
  398.     Graphics.freeze
  399.     Graphics.frame_rate = 60
  400.     dispose_main_viewport
  401.     effect_sprites.each {|sprite| sprite.dispose }
  402.   end
  403.   #--------------------------------------------------------------------------
  404.   # ● フェードイン実行
  405.   #--------------------------------------------------------------------------
  406.   def self.perform_fadein
  407.     return unless @effect_bitmap
  408.     index = IN_VARIABLE ? $game_variables[IN_INDEX] : IN_INDEX
  409.     params = INEFF[index]
  410.     return Graphics.transition(10) unless params
  411.     return Graphics.transition(params[:time]) if index == 0
  412.     if index == 1 || index == 2
  413.       name = params[:name] || "BattleStart"
  414.       Graphics.transition(params[:time], "Graphics/System/" << name, 100)
  415.       return
  416.     end
  417.     create_main_viewport
  418.     @viewport2 = Viewport.new
  419.     @viewport2.z = 450
  420.     @viewport2.color.set(params[:color]) if params[:color]
  421.     @viewport2.color.alpha = 0
  422.     Graphics.transition(0)
  423.     Graphics.frame_rate = 60 / params[:rate]
  424.     effect_sprites = []
  425.     step = params[:rate] * 180.0 / params[:time]
  426.     dur = 180 * (params[:fadein] || 30) / params[:time]
  427.     case index
  428.     when 3
  429.       effect_sprites << make_back_sprite(@viewport2)
  430.       effect_sprites[0].wave_length = params[:length]
  431.       effect_sprites << make_effect_sprite1
  432.       effect_sprites[1].z += 1
  433.       0.step(180, step) do |i|
  434.         m = 180 ** 2
  435.         d = m - i ** 2
  436.         effect_sprites[0].wave_amp = params[:amp] * d / m
  437.         effect_sprites[0].wave_speed = (180 - i) * 5
  438.         effect_sprites[0].opacity = (180 - i) * 3 / 2
  439.         effect_sprites[0].update
  440.         effect_sprites[1].opacity = 255 - 255 * i / 60
  441.         update_fadein(i, dur)
  442.       end
  443.     when 4
  444.       effect_data = {}
  445.       max = 32 * params[:time] / 180
  446.       make_break_sprites1(params[:side]).each do |sprite|
  447.         effect_sprites << sprite
  448.         effect_data[sprite] = make_effect_data1(sprite, max)
  449.       end
  450.       0.step(180, step) do |i|
  451.         update_break_effect1(effect_data, params[:time], i)
  452.         effect_data.each_key {|sprite| sprite.opacity = (180 - i) * 4 }
  453.         update_fadein(i, dur)
  454.       end
  455.     when 5
  456.       effect_data = {}
  457.       max = 24 * params[:time] / 180
  458.       make_break_sprites1(params[:side]).each do |sprite|
  459.         effect_sprites << sprite
  460.         effect_data[sprite] = make_effect_data2(sprite, max, params[:dir])
  461.       end
  462.       0.step(180, step) do |i|
  463.         update_break_effect2(effect_data, i, params[:dir])
  464.         effect_data.each_key {|sprite| sprite.opacity = (180 - i) * 8 }
  465.         update_fadein(i, dur)
  466.       end
  467.     end
  468.     dispose_main_viewport
  469.     @viewport2.dispose
  470.     dispose_effect_bitmap
  471.     effect_sprites.each {|sprite| sprite.dispose }
  472.     Graphics.frame_rate = 60
  473.     Graphics.frame_reset
  474.   end
  475.   #--------------------------------------------------------------------------
  476.   # ● エフェクトスプライトの作成 1
  477.   #--------------------------------------------------------------------------
  478.   def self.make_effect_sprite1
  479.     sprite = Sprite.new(@viewport)
  480.     sprite.bitmap = @effect_bitmap
  481.     sprite.x = sprite.ox = Graphics.width / 2
  482.     sprite.y = sprite.oy = Graphics.height / 2
  483.     sprite
  484.   end
  485.   #--------------------------------------------------------------------------
  486.   # ● エフェクトの大きさ設定
  487.   #--------------------------------------------------------------------------
  488.   def self.update_effect_size(sprite, zoom, rate = 1.0)
  489.     sprite.zoom_x = sprite.zoom_y = zoom
  490.     if zoom > 1
  491.       w =  (@effect_bitmap.width / zoom * rate).to_i / 2
  492.       h =  (@effect_bitmap.height / zoom * rate).to_i / 2
  493.       cx = [sprite.ox - w, 0].max
  494.       cy = [sprite.oy - h, 0].max
  495.       cw = [sprite.ox + w, @effect_bitmap.width].min - cx
  496.       ch = [sprite.oy + h, @effect_bitmap.height].min - cy
  497.       sprite.ox += sprite.src_rect.x - cx
  498.       sprite.oy += sprite.src_rect.y - cy
  499.       sprite.src_rect.set(cx, cy, cw, ch)
  500.       Graphics.frame_reset
  501.     end
  502.   end
  503.   #--------------------------------------------------------------------------
  504.   # ● 画面破壊用エフェクト準備 1
  505.   #--------------------------------------------------------------------------
  506.   def self.make_break_sprites1(side)
  507.     sprites = []
  508.     rect = Rect.new
  509.     height = Graphics.width / side
  510.     row = (Graphics.height + height / 2) / height
  511.     side.times do |x| row.times do |y|
  512.       rect.x = Graphics.width * x / side
  513.       rect.y = Graphics.height * y / row
  514.       rect.width = Graphics.width * (x + 1) / side - rect.x
  515.       rect.height = Graphics.height * (y + 1) / row - rect.y
  516.       sprites << make_effect_sprite2(rect, 0)
  517.       sprites << make_effect_sprite2(rect, 2)
  518.     end; end
  519.     Graphics.frame_reset
  520.     sprites
  521.   end
  522.   #--------------------------------------------------------------------------
  523.   # ● エフェクトスプライトの作成 2
  524.   #--------------------------------------------------------------------------
  525.   def self.make_effect_sprite2(rect, pos)
  526.     sprite = Sprite.new(@viewport)
  527.     sprite.bitmap = Bitmap.new(rect.width, rect.height)
  528.     sprite.bitmap.blt(0, 0, @effect_bitmap, rect)
  529.     d = [rect.width, rect.height].max
  530.     if pos == 0
  531.       d.times {|i| sprite.bitmap.clear_rect(rect.width * (d - i) / d, i, i, 1) }
  532.     else
  533.       d.times {|i| sprite.bitmap.clear_rect(0, i, rect.width * (d - i) / d, 1) }
  534.     end
  535.     sprite.ox = rect.width * (pos + 1) / 4
  536.     sprite.oy = rect.height * (pos + 1) / 4
  537.     sprite.x = rect.x + sprite.ox
  538.     sprite.y = rect.y + sprite.oy
  539.     sprite
  540.   end
  541.   #--------------------------------------------------------------------------
  542.   # ● 背景スプライトの作成
  543.   #--------------------------------------------------------------------------
  544.   def self.make_back_sprite(viewport)
  545.     sprite = Sprite.new(viewport)
  546.     sprite.bitmap = Graphics.snap_to_bitmap
  547.     sprite
  548.   end
  549.   #--------------------------------------------------------------------------
  550.   # ● エフェクトデータの作成 1
  551.   #--------------------------------------------------------------------------
  552.   def self.make_effect_data1(sprite, max)
  553.     result = [rand(3)] # ウェイト
  554.     sx = sprite.x - Graphics.width / 2
  555.     sy = sprite.y - Graphics.height / 2
  556.     result[1] = Math.asin(1 - Math.hypot(sx, sy) / 360) * rand(6) ** 2 / 10 + 1 # 拡大率
  557.     rate = 3.5
  558.     result[1] = rate = 20.0 if result[1] > 2.5 && rand(3) == 0
  559.     result[2] = (sx - rand(17) + 8) * rate + Graphics.width / 2 # 移動先 X
  560.     result[3] = sprite.x - result[2] # X 軸移動距離
  561.     result[4] = (sy - rand(13) + 6) * rate + Graphics.height / 2 # 移動先 Y
  562.     result[5] = sprite.y - result[4] # Y 軸移動距離
  563.     result[6] = (rand(max) + 1) * (rand(2) == 0 ? 1 : -1) / 4.0 # 回転
  564.     result[7] = (rand(max) + 1) * (rand(2) == 0 ? 1 : -1) / 4.0 # X 軸回転
  565.     result[8] = rand(max + 1) * (rand(2) == 0 ? 1 : -1) / 4.0 # Y 軸回転
  566.     result[9] = sprite.ox # X 軸原点記憶
  567.     result
  568.   end
  569.   #--------------------------------------------------------------------------
  570.   # ● 破壊エフェクトの更新 1
  571.   #--------------------------------------------------------------------------
  572.   def self.update_break_effect1(effect_data, time, i)
  573.     if i < 90
  574.       d = (45 ** 2 - (i - 45) ** 2) / 40
  575.     else
  576.       d = (90 - i) * 2
  577.     end
  578.     d *= time / 180.0
  579.     effect_data.each do |sprite, data|
  580.       m = i - data[0]
  581.       next if m <= 0
  582.       zoom = data[1] - (data[1] - 1) * (179 - m) ** 2 / 180 ** 2
  583.       next sprite.visible = false if zoom > 6
  584.       sprite.x = data[2] + data[3] * (179 - m) ** 2 / 180 ** 2
  585.       sprite.y = data[4] + data[5] * (179 - m) ** 2 / 180 ** 2
  586.       sprite.y -= d * zoom if data[1] < 16
  587.       sprite.z = data[1] * 100
  588.       spin_set_sprite(sprite, m, zoom, data)
  589.     end
  590.   end
  591.   #--------------------------------------------------------------------------
  592.   # ● スプライト回転
  593.   #--------------------------------------------------------------------------
  594.   def self.spin_set_sprite(sprite, i, zoom, data)
  595.     zoom_x = zoom * Math.cos(i * data[7] * Math::PI / 180)
  596.     zoom_y = zoom * Math.cos(i * data[8] * Math::PI / 180)
  597.     sprite.mirror = (zoom_x < 0) != (zoom_y < 0)
  598.     sprite.ox = sprite.mirror ? sprite.width - data[9] : data[9]
  599.     sprite.zoom_x = zoom_x.abs
  600.     sprite.zoom_y = zoom_y.abs
  601.     sprite.angle = i * data[6] + (zoom_y < 0 ? 180 : 0)
  602.   end
  603.   #--------------------------------------------------------------------------
  604.   # ● エフェクトデータの作成 2
  605.   #--------------------------------------------------------------------------
  606.   def self.make_effect_data2(sprite, max, dir)
  607.     result = []
  608.     case dir
  609.     when 2; wait = 90 - 90 * sprite.y / Graphics.height
  610.     when 4; wait = 90 * sprite.x / Graphics.width
  611.     when 6; wait = 90 - 90 * sprite.x / Graphics.width
  612.     when 8; wait = 90 * sprite.y / Graphics.height
  613.     end
  614.     result[0] = wait + rand(5) - 5 # ウェイト
  615.     sx = sprite.x - Graphics.width / 2
  616.     sy = sprite.y - Graphics.height / 2
  617.     rate = 2.0 - result[0] / 90.0
  618.     result[1] = 1.5 # 拡大率
  619.     result[2] = sprite.x # 現在 X
  620.     result[4] = sprite.y # 現在 Y
  621.     case dir
  622.     when 2
  623.       result[3] = (sprite.x - Graphics.width / 2) / 2 # X 軸移動距離
  624.       result[5] = Graphics.height * rate # Y 軸移動距離
  625.     when 4
  626.       result[3] = -Graphics.width * rate # X 軸移動距離
  627.       result[5] = (sprite.y - Graphics.height / 2) / 2 # Y 軸移動距離
  628.     when 6
  629.       result[3] = Graphics.width * rate # X 軸移動距離
  630.       result[5] = (sprite.y - Graphics.height / 2) / 2 # Y 軸移動距離
  631.     when 8
  632.       result[3] = (sprite.x - Graphics.width / 2) / 2 # X 軸移動距離
  633.       result[5] = -Graphics.height * rate # Y 軸移動距離
  634.     end
  635.     result[6] = (rand(max) + 1) * (rand(2) == 0 ? 1 : -1) / 4.0 # 回転
  636.     result[7] = (rand(max) + 1) * (rand(2) == 0 ? 1 : -1) / 4.0 # X 軸回転
  637.     result[8] = rand(max + 1) * (rand(2) == 0 ? 1 : -1) / 4.0 # Y 軸回転
  638.     result[9] = sprite.ox # X 軸原点記憶
  639.     result
  640.   end
  641.   #--------------------------------------------------------------------------
  642.   # ● 破壊エフェクトの更新 2
  643.   #--------------------------------------------------------------------------
  644.   def self.update_break_effect2(effect_data, i, dir)
  645.     effect_data.each do |sprite, data|
  646.       m = i - data[0]
  647.       next if m <= 0
  648.       next sprite.visible = false if m > 90
  649.       zoom = data[1] - (data[1] - 1) * (90 - m) ** 2 / 90 ** 2
  650.       next sprite.visible = false if zoom > 6
  651.       case dir
  652.       when 2, 8
  653.         sprite.x = data[2] + data[3] * m / 90
  654.         sprite.y = data[4] + data[5] * m ** 2 / 90 ** 2
  655.       when 4, 6
  656.         sprite.x = data[2] + data[3] * m ** 2 / 90 ** 2
  657.         sprite.y = data[4] + data[5] * m / 90
  658.       end
  659.       spin_set_sprite(sprite, m, zoom, data)
  660.     end
  661.   end
  662.   #--------------------------------------------------------------------------
  663.   # ● 画面破壊用エフェクト準備 2
  664.   #--------------------------------------------------------------------------
  665.   def self.make_break_sprites2
  666.     base = [$game_player.screen_x, $game_player.screen_y - 20]
  667.     pos_data = []
  668.     r = 2 * Math::PI / 8
  669.     8.times do |i|
  670.       radian = r * i
  671.       pos = base
  672.       begin
  673.         d = rand(100) + 50
  674.         r2 = radian + radian * (rand * 0.8 - 0.4)
  675.         pos[0] -= d * Math.sin(r2)
  676.         pos[1] -= d * Math.cos(r2)
  677.         
  678.         
  679.       end while pos[0].between?(0, Graphics.width) &&
  680.                 pos[1].between?(0, Graphics.height)
  681.     end
  682.    
  683.     sprites = []
  684.     sprites
  685.   end
  686.   #--------------------------------------------------------------------------
  687.   # ● トランジション実行 [フェードアウト]
  688.   #--------------------------------------------------------------------------
  689.   def self.fadeout_transition(params)
  690.     d     = params[:time] || 60
  691.     name  = params[:name] || "BattleStart"
  692.     color = params[:color] || Color.new(0, 0, 0, 255)
  693.     create_main_viewport
  694.     @viewport.color.set(color)
  695.     Graphics.transition(d, "Graphics/System/" << name, 100)
  696.     Graphics.freeze
  697.     snapshot_for_effect
  698.     dispose_main_viewport
  699.   end
  700. end

  701.   @material ||= []
  702.   @material << :PrBtEff
  703.   def self.include?(sym)
  704.     @material.include?(sym)
  705.   end

  706. end

  707. #==============================================================================
  708. # ■ Scene_Map
  709. #==============================================================================
  710. class Scene_Map
  711.   #--------------------------------------------------------------------------
  712.   # ◯ 終了前処理
  713.   #--------------------------------------------------------------------------
  714.   alias _wooden_prebteff_pre_terminate pre_terminate
  715.   def pre_terminate
  716.     WdTk::PrBtEff.snapshot_for_effect if SceneManager.scene_is?(Scene_Battle)
  717.     _wooden_prebteff_pre_terminate
  718.   end
  719.   #--------------------------------------------------------------------------
  720.   # ☆ 戦闘前トランジション実行
  721.   #--------------------------------------------------------------------------
  722.   def perform_battle_transition
  723.     WdTk::PrBtEff.perform_fadeout
  724.   end
  725. end

  726. #==============================================================================
  727. # ■ Scene_Battle
  728. #==============================================================================
  729. class Scene_Battle
  730.   #--------------------------------------------------------------------------
  731.   # ☆ トランジション実行
  732.   #--------------------------------------------------------------------------
  733.   def perform_transition
  734.     return if $BTEST
  735.     WdTk::PrBtEff.perform_fadein
  736.     WdTk::PrBtEff.dispose_effect_bitmap
  737.     GC.start
  738.   end
  739. end

  740. if WdTk.include?(:SubMenu)
  741. #==============================================================================
  742. # ■ Scene_ExSubMenu
  743. #==============================================================================
  744. class Scene_ExSubMenu
  745.   #--------------------------------------------------------------------------
  746.   # ◯ 終了前処理
  747.   #--------------------------------------------------------------------------
  748.   alias _wooden_prebteff_pre_terminate pre_terminate
  749.   def pre_terminate
  750.     WdTk::PrBtEff.snapshot_for_effect if SceneManager.scene_is?(Scene_Battle)
  751.     _wooden_prebteff_pre_terminate
  752.   end
  753.   #--------------------------------------------------------------------------
  754.   # ☆ 戦闘前トランジション実行
  755.   #--------------------------------------------------------------------------
  756.   def perform_battle_transition
  757.     WdTk::PrBtEff.perform_fadeout
  758.   end
  759. end
  760. end
复制代码


那…直接用在工程里看效果吧…
原设定是变数2和变数3,明雷遇到敌人你可先用玩家出现惊叹表情,输入变数值,再进入战斗效果…
你要的效果应该是4号,所以在发生战斗前,变数2代入4…就应该可以了,暗雷应该要动脚本…

评分

参与人数 1+1 收起 理由
歌莉·萌露 + 1 认可答案

查看全部评分

回复 支持 2 反对 0

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-4-27 08:45

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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