Project1

标题: 如何在战斗中循环播放动画而不影响战斗 [打印本页]

作者: zhuyapeng119    时间: 2014-12-31 15:13
标题: 如何在战斗中循环播放动画而不影响战斗
就比如boss变身之后,自身周围有一层气场,这个气场就是反复播放一个动画实现的。
作者: 午睡的风铃    时间: 2014-12-31 21:02
说来我没看明白你需要的是啥
外站有你需要的脚本,不过气场效果是气场效果,循环动画是循环动画……
作者: zhuyapeng119    时间: 2014-12-31 22:24
午睡的风铃 发表于 2014-12-31 21:02
说来我没看明白你需要的是啥
外站有你需要的脚本,不过气场效果是气场效果,循环动画是循环动画…… ...

战斗时的循环动画
作者: 午睡的风铃    时间: 2014-12-31 22:49
目测循环的只有状态动画
RUBY 代码复制
  1. #==============================================================================
  2. # +++ MOG - Animation (1.5) +++
  3. # -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
  4. #  By Moghunter
  5. #  [url]http://www.atelier-rgss.com/RGSS/RGSS_VX_ACE.html[/url]
  6. #==============================================================================
  7. # 使数据库中的动画用途更广
  8. #==============================================================================
  9. # 写在技能、物品、状态的备注中 ID = 动画ID
  10. # ----------------------------------------
  11. # ● 命中动画 ●
  12. #   <Hit Animation = ID> 当攻击命中目标后的动画
  13. # ----------------------------------------
  14. # ● 启动动画① ●
  15. #   <Use Animation = ID> 攻击前的动画 可以理解为准备动作
  16. #                        此动画以使用者自己为目标 可以设计成攻击动作
  17. # ----------------------------------------
  18. # ● 启动动画② ●
  19. #   <Wait Use Animation = ID> 播放完启动动画后才会显示技能动画
  20. # ----------------------------------------
  21. # ● 状态动画<循环> ●
  22. #   <Loop Animation = ID> 写在状态备注中 当附加了此状态后会循环播放的动画
  23. # ----------------------------------------
  24. # ● 死亡动画 ●
  25. #   <Death Animation = ID> 濒死时播放的动画
  26. #==============================================================================
  27. module MOG_ANIMATION_PLUS
  28.   # 忽略等待时间的动画ID。
  29.   IGNORE_WAIT_TIME_ANIMATION_ID = [
  30.     1, 3, 21, 50,
  31.  
  32.   999]
  33.  
  34.   # 状态动画循环速度
  35.   STATES_LOOP_SPEED = 30
  36.  
  37.   # 升级动画
  38.   LEVEL_UP_ANIMATION = 2
  39. end
  40. #==============================================================================
  41. $imported = {} if $imported.nil?
  42. $imported[:mog_animation_plus] = true
  43. #==============================================================================
  44. # ■ Game Battler
  45. #==============================================================================
  46. class Game_Battler < Game_BattlerBase
  47.   attr_accessor :animation_loop
  48.   #--------------------------------------------------------------------------
  49.   # ● Initialize
  50.   #--------------------------------------------------------------------------
  51.   alias mog_animation_plus_initialize initialize
  52.   def initialize
  53.       mog_animation_plus_initialize
  54.       @animation_loop = []
  55.   end
  56.   #--------------------------------------------------------------------------
  57.   # ● Add New State
  58.   #--------------------------------------------------------------------------
  59.   alias mog_animation_plus_add_new_state add_new_state
  60.   def add_new_state(state_id)
  61.       mog_animation_plus_add_new_state(state_id)
  62.       check_loop_animation
  63.   end   
  64.   #--------------------------------------------------------------------------
  65.   # ● Erase State
  66.   #--------------------------------------------------------------------------
  67.   alias mog_animation_plus_erase_state erase_state
  68.   def erase_state(state_id)  
  69.       mog_animation_plus_erase_state(state_id)  
  70.       check_loop_animation
  71.   end  
  72.   #--------------------------------------------------------------------------
  73.   # ● Check Loop Animation
  74.   #--------------------------------------------------------------------------
  75.   def check_loop_animation
  76.       @animation_loop.clear
  77.       self.states.each_with_index do |i, index|
  78.       if i.note =~ /<Loop Animation = (\d+)>/i   
  79.          @animation_loop.push([$1.to_i,0, index + 1, true])
  80.       end
  81.       end
  82.   end
  83.   #--------------------------------------------------------------------------
  84.   # ● Item Apply
  85.   #--------------------------------------------------------------------------
  86.   alias mog_animation_plus_item_apply item_apply
  87.   def item_apply(user, item)
  88.       mog_animation_plus_item_apply(user, item)
  89.       execute_animation_plus_hit(item) if @result.success
  90.   end
  91.   #--------------------------------------------------------------------------
  92.   # ● Execute Animation Plus Hit
  93.   #--------------------------------------------------------------------------
  94.   def execute_animation_plus_hit(item)
  95.       return if item == nil
  96.       return if !SceneManager.scene_is?(Scene_Battle)
  97.       self.animation_id = $1.to_i if item.note =~ /<Hit Animation = (\d+)>/i   
  98.       if self.dead?
  99.          if self.is_a?(Game_Enemy)
  100.             battler = $data_enemies[self.enemy_id]
  101.          else
  102.             battler = $data_actors[self.id]
  103.          end  
  104.          self.animation_id = $1.to_i if
  105.                              battler.note =~ /<Death Animation = (\d+)>/i
  106.       end
  107.   end
  108. end
  109. #==============================================================================
  110. # ■ Sprite_Base
  111. #==============================================================================
  112. class Sprite_Base < Sprite  
  113.   #--------------------------------------------------------------------------
  114.   # ● Battle Animation?
  115.   #--------------------------------------------------------------------------
  116.   def battle_animation?
  117.       if @animation != nil
  118.          if MOG_ANIMATION_PLUS::
  119.             IGNORE_WAIT_TIME_ANIMATION_ID.include?(@animation.id)
  120.             return false
  121.          end
  122.          return true         
  123.       end  
  124.       return false
  125.   end
  126. end  
  127. #==============================================================================
  128. # ■ Sprite Battler
  129. #==============================================================================
  130. class Sprite_Battler < Sprite_Base
  131.   #--------------------------------------------------------------------------
  132.   # ● Update Position
  133.   #--------------------------------------------------------------------------
  134.   alias mog_animation_plus_update_position update_position
  135.   def update_position
  136.       mog_animation_plus_update_position
  137.       update_loop_animation if can_loop_animation?
  138.   end
  139.   #--------------------------------------------------------------------------
  140.   # ● Can Loop Animation?
  141.   #--------------------------------------------------------------------------
  142.   def can_loop_animation?
  143.       return false if BattleManager.in_turn?
  144.       return false if self.animation?
  145.       return false if @battler.animation_loop.empty? or @battler.dead?  
  146.       if $imported[:mog_battle_hud_ex]
  147.       return false if
  148.          $game_message.visible and MOG_BATTLE_HUD_EX::MESSAGE_WINDOW_FADE_HUD
  149.       return false if !$game_temp.battle_hud_visible
  150.       end         
  151.       return true
  152.   end
  153.   #--------------------------------------------------------------------------
  154.   # ● Update Loop Animation
  155.   #--------------------------------------------------------------------------
  156.   def update_loop_animation
  157.       for i in @battler.animation_loop
  158.           next if !i[3]
  159.           i[1] += 1
  160.           if i[1] >= MOG_ANIMATION_PLUS::STATES_LOOP_SPEED
  161.              i[1] = 0 ; @battler.animation_id = i[0] ; i[3] = false
  162.              if i[2] >= @battler.animation_loop.size
  163.                 for i in @battler.animation_loop
  164.                     i[1] = 0 ; i[3] = true
  165.                 end                 
  166.             end  
  167.           end
  168.           break           
  169.       end        
  170.   end
  171.   #--------------------------------------------------------------------------
  172.   # ● Update Z Correction
  173.   #--------------------------------------------------------------------------
  174.   def update_z_correction
  175.       return if !@animation
  176.       @ani_sprites.each do |sprite| sprite.z = self.z + 1 end
  177.   end  
  178. end
  179. #==============================================================================
  180. # ■ Spriteset_Battle
  181. #==============================================================================
  182. class Spriteset_Battle
  183.   #--------------------------------------------------------------------------
  184.   # ● Animation?
  185.   #--------------------------------------------------------------------------
  186.   def animation?
  187.       battler_sprites.any? {|sprite| sprite.battle_animation? }
  188.   end  
  189. end
  190. #==============================================================================
  191. # ■ Scene Battle
  192. #==============================================================================
  193. class Scene_Battle < Scene_Base
  194.   #--------------------------------------------------------------------------
  195.   # ● Start
  196.   #--------------------------------------------------------------------------
  197.   alias mog_animation_plus_start start
  198.   def start
  199.       $game_party.members.each {|actor| actor.check_loop_animation }   
  200.       mog_animation_plus_start
  201.   end
  202.   #--------------------------------------------------------------------------
  203.   # ● Use Item
  204.   #--------------------------------------------------------------------------
  205.   alias mog_animation_plus_use_item use_item
  206.   def use_item
  207.       execute_cast_animation
  208.       mog_animation_plus_use_item        
  209.   end
  210.   #--------------------------------------------------------------------------
  211.   # ● Execute Cast Animation
  212.   #--------------------------------------------------------------------------
  213.   def execute_cast_animation
  214.       return if @subject.current_action.item == nil rescue return
  215.       item = @subject.current_action.item
  216.       if item.note =~ /<Use Animation = (\d+)>/i
  217.          execute_animation(@subject, $1.to_i,false)   
  218.       elsif item.note =~ /<Wait Use Animation = (\d+)>/i  
  219.          execute_animation(@subject, $1.to_i,true)   
  220.       end  
  221.   end  
  222.   #--------------------------------------------------------------------------
  223.   # ● Execute Animation
  224.   #--------------------------------------------------------------------------
  225.   def execute_animation(subject , anime_id = 0, wait_animation = false)
  226.       return if anime_id <= 0 or subject == nil
  227.       subject.animation_id = anime_id rescue nil
  228.       if wait_animation
  229.          duration = ($data_animations[anime_id].frame_max * 4) + 1
  230.          for i in 0..duration
  231.              @spriteset.update ; Graphics.update
  232.          end      
  233.       end   
  234.   end  
  235. end   
  236. #==============================================================================
  237. # ■ Game Actor
  238. #==============================================================================
  239. class Game_Actor < Game_Battler
  240.   #--------------------------------------------------------------------------
  241.   # ● Level UP
  242.   #--------------------------------------------------------------------------
  243.   alias mog_animation_plus_level_up level_up
  244.   def level_up
  245.        mog_animation_plus_level_up
  246.        self.animation_id = MOG_ANIMATION_PLUS::LEVEL_UP_ANIMATION if
  247.                            can_lvup_animation?
  248.   end
  249.   #--------------------------------------------------------------------------
  250.   # ● Can Lvup Animation
  251.   #--------------------------------------------------------------------------
  252.   def can_lvup_animation?
  253.       return false if !use_sprite?
  254.       return false if !SceneManager.scene_is?(Scene_Battle)
  255.       if $imported[:mog_battle_hud_ex]
  256.           return false if $game_message.visible and
  257.                           MOG_BATTLE_HUD_EX::MESSAGE_WINDOW_FADE_HUD
  258.           return false if !$game_temp.battle_hud_visible
  259.       end
  260.       return true
  261.   end
  262. end

作者: zhuyapeng119    时间: 2015-1-2 22:53
午睡的风铃 发表于 2014-12-31 22:49
目测循环的只有状态动画
#============================================================================ ...

谢谢,可以生效,不过有个问题就是播放其他动画的时候那个状态动画会暂时停止。
作者: tseyik    时间: 2015-1-5 13:47
アニメーションするエネミー(改 RGSS3仕様改変)
http://moomoo.asablo.jp/blog/2012/03/21/6383841
可設定敵人用3枚画象偱環播放
範例
rgss3_enemy_animation_renew2.zip (2.97 MB, 下载次数: 91)
# メモ欄に書くゆらゆら用ワード
  MEMO = "エネミーアニメーション"
  # エネミーのメモ欄にこの文字があると、ゆらゆらと動きます。
  # 他とかぶる場合は変えて下さい。

  # アニメーション設定
  ANIME = [
          [32,"グリフォン1","グリフォン2","グリフォン3","グリフォン2",10,1,"Audio/SE/wind1",80,100],
          [33,"ラミア1","ラミア2","ラミア3","ラミア2",25,0],
          ]
  # [
  # [1,"スライム1","スライム2","スライム3","スライム2",20,2,"Audio/SE/wind1",60,100],
  # [2,"こうもり1","コウモリⅡ","こーもり三","こうもり1",10,2,"Audio/SE/wind3",50,80],
  # [3,"魔王","デーモン","魔神","魔神ちゃん",50,0],
  # ]
  #
  # このように記述します。最初と最後の[]はそのままにしておいて下さい。
  #
  # [エネミーID,"画像1","画像2","画像3","行動不能時画像",アニメーション間隔,音番号,"SEファイル",音量,ピッチ]
  #
  # 本機能は「エネミーアニメーション」とは無関係で動くため、
  # エネミーのメモにゆらゆら用ワードがなくても構いません。
  #
  # ・エネミーIDは、アニメーションさせたい敵のIDです。グループIDではありません。
  #
  # ・画像1~3は、歩行グラフィックの感覚です。
  #   1,2,3それぞれ歩行グラフィックの左、中、右のような感じです。
  #   それをエネミーグラフィックで指定します。""で囲って下さい。
  #   途中で変身する場合、変身対象も動かす場合はそれにも適用して下さい。
  #   メニューのツール→素材管理→Graphics/Battlerにある画像を指定します。
  #
  # ・行動不能時画像
  #   麻痺など行動不能に陥ったエネミーはアニメーションを停止します。
  #   その時に使うエネミー画像を指定します。これも画像1~3と同様に、
  #   メニューのツール→素材管理→Graphics/Battlerにある画像を指定します。
  #   画像1~3の中と同じ画像でも、いっこうに構いません。""で囲って下さい。
  #     ちなみにその場で止まるので、飛行エネミーが落下するなどの動作はありません。
  #
  # ・アニメーション間隔
  #     歩行グラフィックのようにアニメーションをする場合の、
  #     画像が切り替わる間隔を指定します。適当な間隔をお試しあれ。
  #
  # ・音番号
  #     アニメーションは3段階に分かれているのですが、羽ばたいている音を出したい
  #     時などは、画像1~3のどの瞬間に音を出すかを決めます。その番号です。
  #     1と指定すれば、アニメーションが画像1の時に音を出します。
  #     1→2→3→2→1→2→3と繰り返すので、2に入れるとうるさいかも知れません。
  #     音が不要な場合は1,2,3以外の数字を入れて下さい。不要でもこの項目は必須です。
  #
  # ・SEファイル
  #   羽ばたく音などを鳴らしたい時に指定します。音番号が1~3の時だけ有効です。
  #     Audio/SE/~~とフルに書いて下さい。""で囲って下さい。
  #     音番号を1~3以外に指定した場合は、SEを指定しなくても構いません。
  #
  # ・音量
  #     SEの音量です。あまり大きいとやかましいです。控えめがいいでしょう。
  #     音番号が1~3の時だけ有効です。
  #     音番号を1~3以外に指定した場合は、音量を指定しなくても構いません。
  #
  # ・ピッチ
  #     SEのピッチです。音量と合わせ、サウンドテストにて
  #     アニメーションの間隔でサウンド名を連打してみると実感が湧くと思います。
  #     音番号が1~3の時だけ有効です。
  #     音番号を1~3以外に指定した場合は、ピッチを指定しなくても構いません。
  #
  # 行動不能になったら飛んでる敵が落ちるなどという面倒な処理はしていません。
  # また、ゆらゆら動くのと併用する場合、敵が多くなればなるほど重くなります。
  #
  # 設定記述ミスによるエラーチェックはしていません。
作者: zhuyapeng119    时间: 2015-1-5 18:42
tseyik 发表于 2015-1-5 13:47
アニメーションするエネミー(改 RGSS3仕様改変)
http://moomoo.asablo.jp/blog/2012/03/21/6383841
可設定 ...

一头雾水
作者: lqly10    时间: 2015-11-5 23:14
午睡的风铃 发表于 2014-12-31 22:49
目测循环的只有状态动画
#============================================================================ ...

朋友 你这个状态动画怎么用 我用了 但没有状态动画显示的
作者: lqly10    时间: 2015-11-6 01:28
午睡的风铃 发表于 2014-12-31 22:49
目测循环的只有状态动画
#============================================================================ ...

但我之前横版只能在待机时候显示  战斗时候显示不了  有没办法在战斗时也显示呢  你能否测试下
作者: lqly10    时间: 2015-11-6 01:28
午睡的风铃 发表于 2014-12-31 22:49
目测循环的只有状态动画
#============================================================================ ...

但我之前横版只能在待机时候显示  战斗时候显示不了  有没办法在战斗时也显示呢  你能否测试下
作者: 午睡的风铃    时间: 2015-11-6 03:31
lqly10 发表于 2015-11-6 01:28
但我之前横版只能在待机时候显示  战斗时候显示不了  有没办法在战斗时也显示呢  你能否测试下 ...

这个脚本的功能仅是在待机时显示动画。

如果你打算高度仿真某个游戏或者完美实现某个复杂的效果,估计只能自己或请大神写脚本了。
作者: lqly10    时间: 2015-11-15 00:02
午睡的风铃 发表于 2014-12-31 21:02
说来我没看明白你需要的是啥
外站有你需要的脚本,不过气场效果是气场效果,循环动画是循环动画…… ...

XP的 能否帮我修改下
RUBY 代码复制
  1. =begin
  2. 待机(面向左)    :00    01    02    03      共 4 张。
  3. 待机(面向右)    :10    11    12    13      共 4 张。
  4. 移动(面向左)    :20    21    22    23      共 4 张。
  5. 移动(面向右)    :30    31    32    33      共 4 张。
  6. 攻击(面向左)    :40    41    42    43      共 4 张。
  7. 攻击(面向右)    :50    51    52    53      共 4 张.
  8. 防御(面向左)    :80                              共 1 张.
  9. 防御(面向右)    :90                              共 1 张.
  10. 挨打(面向左)    :100                            共 1 张.
  11. 挨打(面向右)    :110                            共 1 张.
  12. 死亡(面向左)    :140  141                    共 2 张.
  13. 死亡(面向右)    :150  151                    共 2 张.
  14. =end
  15. #==============================================================================
  16. ###############################################################################
  17. #==============================================================================
  18. # ★全图片单帧播放实现战斗动态效果★  
  19. #==============================================================================
  20. #  by -> 芯☆淡如水
  21. #==============================================================================
  22. ###############################################################################
  23. #==============================================================================
  24. module RPG
  25.   module Cache
  26.     def self.battler(name, filename, hue)
  27.       self.load_bitmap("Graphics/Battlers/"+name+"/", filename, hue)
  28.     end
  29.   end
  30.   class Sprite < ::Sprite
  31.     def initialize(viewport = nil)
  32.       super(viewport)
  33.       @_whiten_duration = 0
  34.       @_appear_duration = 0
  35.       @_escape_duration = 0
  36.       @_collapse_duration = 0
  37.       @_damage_duration = 0
  38.       @_animation_duration = 0
  39.       @_blink = false
  40.       @_tip_duration = 0
  41.     end
  42.     #-----------------------------------------------------------
  43.     alias add_dispose_xdrs dispose
  44.     def dispose
  45.       dispose_tip
  46.       dispose_damage
  47.       dispose_animation
  48.       dispose_loop_animation
  49.       super
  50.     end
  51.     #-----------------------------------------------------------
  52.     def tip(txt, type)
  53.       dispose_tip
  54.       bitmap = Bitmap.new(240, 52)
  55.       bitmap.font.name = (["黑体","宋体","Arial Black"])
  56.       bitmap.font.size = 32
  57.       bitmap.font.bold = true
  58.       if type == 1
  59.         bitmap.font.color.set(255, 0, 255)
  60.         bitmap.draw_text(+1, 6+1, 220, 50, txt, 1)
  61.         bitmap.font.color.set(0, 255, 120)
  62.         bitmap.draw_text(0, 6, 220, 50, txt, 1)
  63.       else
  64.         bitmap.font.color.set(0, 255, 120)
  65.         bitmap.draw_text(+1, 6+1, 220, 50, txt, 1)
  66.         bitmap.font.color.set(255, 0, 255)
  67.         bitmap.draw_text(0, 6, 220, 50, txt, 1)
  68.       end
  69.       @_tip_sprite = ::Sprite.new(self.viewport)
  70.       @_tip_sprite.bitmap = bitmap
  71.       @_tip_sprite.opacity = 0
  72.       @_tip_sprite.ox = 120
  73.       @_tip_sprite.oy = 20
  74.       @_tip_sprite.x = self.x
  75.       @_tip_sprite.y = self.y - self.oy / 2
  76.       @_tip_sprite.z = 3000
  77.       @_tip_duration = 60
  78.     end
  79.     #-----------------------------------------------------------
  80.     def dispose_tip
  81.       if @_tip_sprite != nil
  82.         @_tip_sprite.bitmap.dispose
  83.         @_tip_sprite.dispose
  84.         @_tip_sprite = nil
  85.         @_tip_duration = 0
  86.       end
  87.     end
  88.     def update
  89.       super
  90.       if @_whiten_duration > 0
  91.         @_whiten_duration -= 1

作者: lqly10    时间: 2015-11-15 00:10
lqly10 发表于 2015-11-15 00:02
XP的 能否帮我修改下
=begin
待机(面向左)    :00    01    02    03      共 4 张。

不要改啦 谢谢




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