查看: 4759|回复: 12

[已经解决] 如何在战斗中循环播放动画而不影响战斗

[复制链接]
梦石
0
星屑
473
在线时间
155 小时
注册时间
2014-12-4
回帖
59
发表于 2014-12-31 15:13:55 | 显示全部楼层 |阅读模式

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

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

×
就比如boss变身之后,自身周围有一层气场,这个气场就是反复播放一个动画实现的。
梦石
0
星屑
1736
在线时间
761 小时
注册时间
2013-9-23
回帖
180

开拓者

发表于 2014-12-31 21:02:05 | 显示全部楼层
说来我没看明白你需要的是啥
外站有你需要的脚本,不过气场效果是气场效果,循环动画是循环动画……
回复

使用道具 举报

梦石
0
星屑
473
在线时间
155 小时
注册时间
2014-12-4
回帖
59
 楼主| 发表于 2014-12-31 22:24:49 | 显示全部楼层
午睡的风铃 发表于 2014-12-31 21:02
说来我没看明白你需要的是啥
外站有你需要的脚本,不过气场效果是气场效果,循环动画是循环动画…… ...

战斗时的循环动画
回复

使用道具 举报

梦石
0
星屑
1736
在线时间
761 小时
注册时间
2013-9-23
回帖
180

开拓者

发表于 2014-12-31 22:49:58 | 显示全部楼层
目测循环的只有状态动画
[pre lang="ruby" line="1"]#==============================================================================
# +++ MOG - Animation (1.5) +++
# -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
#  By Moghunter
#  http://www.atelier-rgss.com/RGSS/RGSS_VX_ACE.html
#==============================================================================
# 使数据库中的动画用途更广
#==============================================================================
# 写在技能、物品、状态的备注中 ID = 动画ID
# ----------------------------------------
# ● 命中动画 ●
#   <Hit Animation = ID> 当攻击命中目标后的动画
# ----------------------------------------
# ● 启动动画① ●
#   <Use Animation = ID> 攻击前的动画 可以理解为准备动作
#                        此动画以使用者自己为目标 可以设计成攻击动作
# ----------------------------------------
# ● 启动动画② ●
#   <Wait Use Animation = ID> 播放完启动动画后才会显示技能动画
# ----------------------------------------
# ● 状态动画<循环> ●
#   <Loop Animation = ID> 写在状态备注中 当附加了此状态后会循环播放的动画
# ----------------------------------------
# ● 死亡动画 ●
#   <Death Animation = ID> 濒死时播放的动画
#==============================================================================
module MOG_ANIMATION_PLUS
  # 忽略等待时间的动画ID。
  IGNORE_WAIT_TIME_ANIMATION_ID = [
    1, 3, 21, 50,

  999]

  # 状态动画循环速度
  STATES_LOOP_SPEED = 30

  # 升级动画
  LEVEL_UP_ANIMATION = 2
end
#==============================================================================
$imported = {} if $imported.nil?
$imported[:mog_animation_plus] = true
#==============================================================================
# ■ Game Battler
#==============================================================================
class Game_Battler < Game_BattlerBase
  attr_accessor :animation_loop
  #--------------------------------------------------------------------------
  # ● Initialize
  #--------------------------------------------------------------------------
  alias mog_animation_plus_initialize initialize
  def initialize
      mog_animation_plus_initialize
      @animation_loop = []
  end
  #--------------------------------------------------------------------------
  # ● Add New State
  #--------------------------------------------------------------------------
  alias mog_animation_plus_add_new_state add_new_state
  def add_new_state(state_id)
      mog_animation_plus_add_new_state(state_id)
      check_loop_animation
  end   
  #--------------------------------------------------------------------------
  # ● Erase State
  #--------------------------------------------------------------------------
  alias mog_animation_plus_erase_state erase_state
  def erase_state(state_id)  
      mog_animation_plus_erase_state(state_id)  
      check_loop_animation
  end  
  #--------------------------------------------------------------------------
  # ● Check Loop Animation
  #--------------------------------------------------------------------------
  def check_loop_animation
      @animation_loop.clear
      self.states.each_with_index do |i, index|
      if i.note =~ /<Loop Animation = (\d+)>/i   
         @animation_loop.push([$1.to_i,0, index + 1, true])
      end
      end
  end
  #--------------------------------------------------------------------------
  # ● Item Apply
  #--------------------------------------------------------------------------
  alias mog_animation_plus_item_apply item_apply
  def item_apply(user, item)
      mog_animation_plus_item_apply(user, item)
      execute_animation_plus_hit(item) if @result.success
  end
  #--------------------------------------------------------------------------
  # ● Execute Animation Plus Hit
  #--------------------------------------------------------------------------
  def execute_animation_plus_hit(item)
      return if item == nil
      return if !SceneManager.scene_is?(Scene_Battle)
      self.animation_id = $1.to_i if item.note =~ /<Hit Animation = (\d+)>/i   
      if self.dead?
         if self.is_a?(Game_Enemy)
            battler = $data_enemies[self.enemy_id]
         else
            battler = $data_actors[self.id]
         end  
         self.animation_id = $1.to_i if
                             battler.note =~ /<Death Animation = (\d+)>/i
      end
  end
end
#==============================================================================
# ■ Sprite_Base
#==============================================================================
class Sprite_Base < Sprite  
  #--------------------------------------------------------------------------
  # ● Battle Animation?
  #--------------------------------------------------------------------------
  def battle_animation?
      if @animation != nil
         if MOG_ANIMATION_PLUS::
            IGNORE_WAIT_TIME_ANIMATION_ID.include?(@animation.id)
            return false
         end
         return true         
      end  
      return false
  end
end  
#==============================================================================
# ■ Sprite Battler
#==============================================================================
class Sprite_Battler < Sprite_Base
  #--------------------------------------------------------------------------
  # ● Update Position
  #--------------------------------------------------------------------------
  alias mog_animation_plus_update_position update_position
  def update_position
      mog_animation_plus_update_position
      update_loop_animation if can_loop_animation?
  end
  #--------------------------------------------------------------------------
  # ● Can Loop Animation?
  #--------------------------------------------------------------------------
  def can_loop_animation?
      return false if BattleManager.in_turn?
      return false if self.animation?
      return false if @battler.animation_loop.empty? or @battler.dead?  
      if $imported[:mog_battle_hud_ex]
      return false if
         $game_message.visible and MOG_BATTLE_HUD_EX::MESSAGE_WINDOW_FADE_HUD
      return false if !$game_temp.battle_hud_visible
      end         
      return true
  end
  #--------------------------------------------------------------------------
  # ● Update Loop Animation
  #--------------------------------------------------------------------------
  def update_loop_animation
      for i in @battler.animation_loop
          next if !i[3]
          i[1] += 1
          if i[1] >= MOG_ANIMATION_PLUS::STATES_LOOP_SPEED
             i[1] = 0 ; @battler.animation_id = i[0] ; i[3] = false
             if i[2] >= @battler.animation_loop.size
                for i in @battler.animation_loop
                    i[1] = 0 ; i[3] = true
                end                 
            end  
          end
          break           
      end        
  end
  #--------------------------------------------------------------------------
  # ● Update Z Correction
  #--------------------------------------------------------------------------
  def update_z_correction
      return if !@animation
      @ani_sprites.each do |sprite| sprite.z = self.z + 1 end
  end  
end
#==============================================================================
# ■ Spriteset_Battle
#==============================================================================
class Spriteset_Battle
  #--------------------------------------------------------------------------
  # ● Animation?
  #--------------------------------------------------------------------------
  def animation?
      battler_sprites.any? {|sprite| sprite.battle_animation? }
  end  
end
#==============================================================================
# ■ Scene Battle
#==============================================================================
class Scene_Battle < Scene_Base
  #--------------------------------------------------------------------------
  # ● Start
  #--------------------------------------------------------------------------
  alias mog_animation_plus_start start
  def start
      $game_party.members.each {|actor| actor.check_loop_animation }   
      mog_animation_plus_start
  end
  #--------------------------------------------------------------------------
  # ● Use Item
  #--------------------------------------------------------------------------
  alias mog_animation_plus_use_item use_item
  def use_item
      execute_cast_animation
      mog_animation_plus_use_item        
  end
  #--------------------------------------------------------------------------
  # ● Execute Cast Animation
  #--------------------------------------------------------------------------
  def execute_cast_animation
      return if @subject.current_action.item == nil rescue return
      item = @subject.current_action.item
      if item.note =~ /<Use Animation = (\d+)>/i
         execute_animation(@subject, $1.to_i,false)   
      elsif item.note =~ /<Wait Use Animation = (\d+)>/i  
         execute_animation(@subject, $1.to_i,true)   
      end  
  end  
  #--------------------------------------------------------------------------
  # ● Execute Animation
  #--------------------------------------------------------------------------
  def execute_animation(subject , anime_id = 0, wait_animation = false)
      return if anime_id <= 0 or subject == nil
      subject.animation_id = anime_id rescue nil
      if wait_animation
         duration = ($data_animations[anime_id].frame_max * 4) + 1
         for i in 0..duration
             @spriteset.update ; Graphics.update
         end      
      end   
  end  
end   
#==============================================================================
# ■ Game Actor
#==============================================================================
class Game_Actor < Game_Battler
  #--------------------------------------------------------------------------
  # ● Level UP
  #--------------------------------------------------------------------------
  alias mog_animation_plus_level_up level_up
  def level_up
       mog_animation_plus_level_up
       self.animation_id = MOG_ANIMATION_PLUS::LEVEL_UP_ANIMATION if
                           can_lvup_animation?
  end
  #--------------------------------------------------------------------------
  # ● Can Lvup Animation
  #--------------------------------------------------------------------------
  def can_lvup_animation?
      return false if !use_sprite?
      return false if !SceneManager.scene_is?(Scene_Battle)
      if $imported[:mog_battle_hud_ex]
          return false if $game_message.visible and
                          MOG_BATTLE_HUD_EX::MESSAGE_WINDOW_FADE_HUD
          return false if !$game_temp.battle_hud_visible
      end
      return true
  end
end[/pre]

评分

参与人数 1梦石 +1 收起 理由
taroxd + 1 认可答案

查看全部评分

回复

使用道具 举报

梦石
0
星屑
473
在线时间
155 小时
注册时间
2014-12-4
回帖
59
 楼主| 发表于 2015-1-2 22:53:30 | 显示全部楼层
午睡的风铃 发表于 2014-12-31 22:49
目测循环的只有状态动画
#============================================================================ ...

谢谢,可以生效,不过有个问题就是播放其他动画的时候那个状态动画会暂时停止。

点评

不客氣,能生效就好。腳本是別人寫的,作者分享了我才有機會搬過來,而且我對腳本一竅不通,所以能做到的僅僅是在確定了你需要它後貼出來。  发表于 2015-1-3 02:35
回复

使用道具 举报

梦石
0
星屑
22879
在线时间
8598 小时
注册时间
2011-12-31
回帖
3270
发表于 2015-1-5 13:47:37 | 显示全部楼层
アニメーションするエネミー(改 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以外に指定した場合は、ピッチを指定しなくても構いません。
  #
  # 行動不能になったら飛んでる敵が落ちるなどという面倒な処理はしていません。
  # また、ゆらゆら動くのと併用する場合、敵が多くなればなるほど重くなります。
  #
  # 設定記述ミスによるエラーチェックはしていません。

评分

参与人数 1星屑 +200 收起 理由
VIPArcher + 200 我很赞同

查看全部评分

回复

使用道具 举报

梦石
0
星屑
473
在线时间
155 小时
注册时间
2014-12-4
回帖
59
 楼主| 发表于 2015-1-5 18:42:00 | 显示全部楼层
tseyik 发表于 2015-1-5 13:47
アニメーションするエネミー(改 RGSS3仕様改変)
http://moomoo.asablo.jp/blog/2012/03/21/6383841
可設定 ...

一头雾水
回复

使用道具 举报

梦石
0
星屑
208
在线时间
152 小时
注册时间
2011-4-22
回帖
25
发表于 2015-11-5 23:14:21 | 显示全部楼层
午睡的风铃 发表于 2014-12-31 22:49
目测循环的只有状态动画
#============================================================================ ...

朋友 你这个状态动画怎么用 我用了 但没有状态动画显示的

点评

我测试过了,你之前的横战脚本可以用,但别的横战就不知道了。  发表于 2015-11-6 01:10
<Loop Animation = ID>标记在状态的备注栏里,ID是动画ID。  发表于 2015-11-6 01:09
回复

使用道具 举报

梦石
0
星屑
208
在线时间
152 小时
注册时间
2011-4-22
回帖
25
发表于 2015-11-6 01:28:16 | 显示全部楼层
午睡的风铃 发表于 2014-12-31 22:49
目测循环的只有状态动画
#============================================================================ ...

但我之前横版只能在待机时候显示  战斗时候显示不了  有没办法在战斗时也显示呢  你能否测试下
回复

使用道具 举报

梦石
0
星屑
208
在线时间
152 小时
注册时间
2011-4-22
回帖
25
发表于 2015-11-6 01:28:48 | 显示全部楼层
午睡的风铃 发表于 2014-12-31 22:49
目测循环的只有状态动画
#============================================================================ ...

但我之前横版只能在待机时候显示  战斗时候显示不了  有没办法在战斗时也显示呢  你能否测试下
回复

使用道具 举报

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

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部