Project1

标题: 如何让怪物有微动作不呆滞 [打印本页]

作者: iop149652    时间: 2015-8-15 02:20
标题: 如何让怪物有微动作不呆滞
要怎么让怪物可以像是GIF图档会动作的

因为我是制作横版战斗

我希望让怪物可以稍微的动

我有GIF档但是不知道该怎么用

求大大解答( ;゚д゚)
作者: duchen5779    时间: 2015-8-15 10:22
RUBY 代码复制
  1. #==============================================================================
  2. # +++ MOG VX - Battler L Effects (v1.0) +++
  3. #==============================================================================
  4. # By Moghunter
  5. # [url]http://www.atelier-rgss.com/[/url] 把静态战斗图做出动态的效果
  6. #==============================================================================
  7. # Adiciona alguns efeitos de animação no sprite do Battler.
  8. # - Efeito de respirar.
  9. # - Efeito de flutuar.
  10. # - Efeito de mover-se para os lados.
  11. #==============================================================================
  12. module MOG_BATTLER_L_EFFECTS
  13.     #Velocidade da respiração(de 1 a 9)
  14.     BREATH_SPEED = 1
  15.     #Definição dos inimigos que terão o efeito de respiração
  16.     #呼吸式动作
  17.     BREATH_EFFECT_ENEMY_ID = [1,2,4,5,7,24,28]  
  18.     #Definição dos battlers que terão o efeito flutuar.
  19.     #上下小幅度移动
  20.     FLOAT_EFFECT_ENEMY_ID = [1]  
  21.     #Definição dos battlers que terão o efeito movimentar se para os lados.
  22.     #左右小幅度移动
  23.     MOVESIDE_EFFECT_ENEMY_ID = [26]
  24.     #Condições que cancelam os efeito do sprite. (Exp - Stop / Paralyze)
  25.     #打不到???
  26.     STATES_CANCEL_EFFECT = [60]
  27. end
  28.  
  29. #===============================================================================
  30. # ■ Game_Battler
  31. #===============================================================================
  32. class Game_Battler
  33. include MOG_BATTLER_L_EFFECTS
  34.  
  35. #--------------------------------------------------------------------------
  36. # ● Add State
  37. #--------------------------------------------------------------------------                       
  38. alias breath_effect_add_state add_state
  39. def add_state(state_id)
  40.      breath_effect_add_state(state_id)
  41.      if self.is_a?(Game_Enemy)
  42.         for i in STATES_CANCEL_EFFECT
  43.             if @states.include?(i)
  44.                @breath_effect = false
  45.                @float_effect = false
  46.                @moveside_effect = false
  47.             end        
  48.         end      
  49.      end
  50. end  
  51.  
  52. #--------------------------------------------------------------------------
  53. # ● Remove_State
  54. #--------------------------------------------------------------------------                        
  55. alias breath_effect_remove_state remove_state
  56. def remove_state(state_id)
  57.      breath_effect_remove_state(state_id)
  58.      if self.is_a?(Game_Enemy)     
  59.         sce = false
  60.         for i in STATES_CANCEL_EFFECT
  61.             sce = true if @states.include?(i)
  62.         end   
  63.         if sce == false   
  64.            @breath_effect = true if BREATH_EFFECT_ENEMY_ID.include?(@enemy_id)
  65.            @float_effect = true if FLOAT_EFFECT_ENEMY_ID.include?(@enemy_id)
  66.            @moveside_effect = true if MOVESIDE_EFFECT_ENEMY_ID.include?(@enemy_id)           
  67.         end   
  68.      end     
  69. end  
  70. end
  71.  
  72. #===============================================================================
  73. # ■ Game_Enemy
  74. #===============================================================================
  75. class Game_Enemy < Game_Battler
  76. include MOG_BATTLER_L_EFFECTS
  77. attr_accessor :breath_effect
  78. attr_accessor :float_effect
  79. attr_accessor :moveside_effect
  80.  
  81. #--------------------------------------------------------------------------
  82. # ● Setup
  83. #--------------------------------------------------------------------------                     
  84. alias breath_effect_initialize initialize
  85. def initialize(index, enemy_id)
  86.      breath_effect_initialize(index, enemy_id)
  87.      @breath_effect = false
  88.      @float_effect = false
  89.      @moveside_effect = false
  90.      @breath_effect = true if BREATH_EFFECT_ENEMY_ID.include?(@enemy_id)
  91.      @float_effect = true if FLOAT_EFFECT_ENEMY_ID.include?(@enemy_id)
  92.      @moveside_effect = true if MOVESIDE_EFFECT_ENEMY_ID.include?(@enemy_id)
  93. end
  94. end
  95.  
  96. #===============================================================================
  97. # ■ Sprite_Battler
  98. #===============================================================================
  99. class Sprite_Battler < Sprite_Base
  100. include MOG_BATTLER_L_EFFECTS
  101.  
  102. #--------------------------------------------------------------------------
  103. # ● Initialize
  104. #--------------------------------------------------------------------------                    
  105. alias breath_effect_initialize initialize
  106. def initialize(viewport, battler = nil)
  107.      breath_effect_initialize(viewport, battler )
  108.      breath_effect_setup(battler)
  109.      float_effect_setup(battler)
  110.      modeside_effect_setup(battler)
  111. end
  112.  
  113. #--------------------------------------------------------------------------
  114. # ● Moveside Effect
  115. #--------------------------------------------------------------------------                       
  116. def modeside_effect_setup(battler)
  117.      @moveside_duration = rand(30)
  118.      @moveside_speed = 0
  119. end  
  120.  
  121. #--------------------------------------------------------------------------
  122. # ● Float Effect Setup
  123. #--------------------------------------------------------------------------                     
  124. def float_effect_setup(battler)
  125.      @float_duration = rand(40)
  126.      @float_speed = rand(3)
  127. end
  128.  
  129. #--------------------------------------------------------------------------
  130. # ● Breath Effect Setup
  131. #--------------------------------------------------------------------------                     
  132. def breath_effect_setup(battler)
  133.      @breath_phase = 0
  134.      @breath_effect = false
  135.      @breath_effect_speed = 0
  136.      if @battler.is_a?(Game_Enemy) and @battler.breath_effect
  137.         initial_breath = 1.00 + (@battler.screen_x * 0.001) - (@battler.screen_y * 0.001)     
  138.         initial_breath = 1.1 if initial_breath > 1.1
  139.         initial_breath = 0.9 if initial_breath < 0.9
  140.         self.zoom_y = initial_breath
  141.         ex_speed = [[BREATH_SPEED, 1].max, 9].min
  142.         speed = ex_speed * 0.001
  143.         @breath_effect_speed = speed + (rand(99) * 0.00001)
  144.      end   
  145. end
  146.  
  147. #--------------------------------------------------------------------------
  148. # ● Update
  149. #--------------------------------------------------------------------------                  
  150. alias breath_effect_update update
  151. def update
  152.      breath_effect_update
  153.      if @battler.is_a?(Game_Enemy)
  154.         update_breath_effect
  155.         update_float_effect
  156.         update_move_side_effect
  157.      end   
  158. end  
  159.  
  160. #--------------------------------------------------------------------------
  161. # ● Update Moveside Effect
  162. #--------------------------------------------------------------------------                  
  163. def update_move_side_effect
  164.      return if @battler == nil
  165.      return unless @battler.moveside_effect
  166.      @moveside_speed += 1
  167.      return if @moveside_speed < 4
  168.      @moveside_speed = 0
  169.      @moveside_duration += 1
  170.      case @moveside_duration
  171.         when 0..10
  172.           self.ox += 2
  173.         when 11..15
  174.           self.ox += 1
  175.         when 16..25
  176.           self.ox -= 2
  177.         when 26..30
  178.           self.ox -= 1
  179.         else  
  180.         @moveside_duration = 0
  181.      end
  182. end
  183.  
  184. #--------------------------------------------------------------------------
  185. # ● Update Float Effect
  186. #--------------------------------------------------------------------------                  
  187. def update_float_effect
  188.      return if @battler == nil
  189.      return unless @battler.float_effect
  190.      @float_speed += 1
  191.      return if @float_speed < 2
  192.      @float_speed = 0
  193.      @float_duration += 1
  194.      case @float_duration
  195.         when 0..15
  196.           self.oy += 2
  197.         when 16..20  
  198.           self.oy += 1
  199.         when 21..35
  200.           self.oy -= 2
  201.         when 36..40  
  202.           self.oy -= 1
  203.         else  
  204.           @float_duration = 0
  205.      end
  206. end
  207.  
  208. #--------------------------------------------------------------------------
  209. # ● Update Breaht Effect
  210. #--------------------------------------------------------------------------                 
  211. def update_breath_effect
  212.      return if @battler == nil
  213.      return unless @battler.breath_effect
  214.      if @breath_effect_speed == 0   
  215.         ex_speed = [[BREATH_SPEED, 1].max, 9].min
  216.         speed = ex_speed * 0.001      
  217.         @breath_effect_speed = speed + (rand(99) * 0.00001)
  218.         self.zoom_y = 1 + rand(10) * 0.01
  219.      end   
  220.      if @breath_phase == 0
  221.         self.zoom_y += @breath_effect_speed
  222.         @breath_phase = 1 if self.zoom_y >= 1.05
  223.      else
  224.         self.zoom_y -= @breath_effect_speed
  225.         @breath_phase = 0 if self.zoom_y <= 1.01
  226.      end            
  227. end     
  228. end  
  229.  
  230. $mog_rgss2_battler_l_effects = true





可以试下这个脚本,在上面的括号里填你要设置的敌人的ID……试了就知道了。







作者: iop149652    时间: 2015-8-15 12:49
谢谢上面的大大分享代码

不过这个不是我心目中的效果

抱歉,是我没有说清楚(在此给你跪)

我有一张怪物战斗图的GIF档已经分解成多段PNG档了

要如何把这些档案结合在战斗上

让怪物呈现原本的GIF动画档呢?
作者: duchen5779    时间: 2015-8-16 21:33
本帖最后由 duchen5779 于 2015-8-16 21:40 编辑

我想一下……也许敌人行走图战斗就可以。我记得这个在通用的横版战斗系统里(就是SIDEVIEW)有设置,除了我方角色可以用行走图之外,敌方角色也可以用行走图。你可以将你的GIF图档做成一张3*3还是3*4的行走图,在数据库的“敌人”的行走图一栏里选择你弄得好的这张行走图,然后在脚本里按设置弄好,设置好之后和主角的战斗行走效果是一样的,也许你的GIF的效果也能体现出来。

说的有点颠倒不知道你听明白没有( ;゚д゚)
作者: iop149652    时间: 2015-8-17 19:32
我大概知道你说的方法了

我会想想看的 非常谢谢你




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