Project1

标题: 求一个敌人攻击敌人的战斗图会放大感觉冲出屏幕的感觉。 [打印本页]

作者: 爆焰    时间: 2019-2-27 23:33
标题: 求一个敌人攻击敌人的战斗图会放大感觉冲出屏幕的感觉。
就是玩过废土灰姑娘觉得这个功能很有意思!但是又不知道具体是怎么实现的。
就是敌人攻击你的时候敌人的战斗图会向你冲来一样,请问该如何实现?
作者: 紫英晓狼1130    时间: 2019-2-28 12:50
好像是动画就能解决的问题?
作者: 正太君    时间: 2019-2-28 20:58
帮你修改了默认脚本,不知道楼主是不是要这个效果...攻击时变大的倍率和时间可以修改...

增加脚本的地方有标识:  # 加加加加加加
删除脚本的地方有标识:  # 删删删删删删
下载范例 Project2.rar (187.06 KB, 下载次数: 108)
或者用以下脚本替换Sprite_Battler
  1. #==============================================================================
  2. # ■ Sprite_Battler
  3. #------------------------------------------------------------------------------
  4. #  战斗显示用活动块。Game_Battler 类的实例监视、
  5. # 活动块的状态的监视。
  6. #==============================================================================

  7. class Sprite_Battler < RPG::Sprite
  8.   #--------------------------------------------------------------------------
  9.   # ● 定义实例变量
  10.   #--------------------------------------------------------------------------
  11.   attr_accessor :battler                  # 战斗者
  12.   #--------------------------------------------------------------------------
  13.   # ● 初始化对像
  14.   #     viewport : 显示端口
  15.   #     battler  : 战斗者 (Game_Battler)
  16.   #--------------------------------------------------------------------------
  17.   def initialize(viewport, battler = nil)
  18.     super(viewport)
  19.     @battler = battler
  20.     @battler_visible = false
  21.     @zoom = 0 # 加加加加加加
  22.   end
  23.   #--------------------------------------------------------------------------
  24.   # ● 释放
  25.   #--------------------------------------------------------------------------
  26.   def dispose
  27.     if self.bitmap != nil
  28.       self.bitmap.dispose
  29.     end
  30.     super
  31.   end
  32.   #--------------------------------------------------------------------------
  33.   # ● 刷新画面
  34.   #--------------------------------------------------------------------------
  35.   def update
  36.     super
  37.     # 战斗者为 nil 的情况下
  38.     if @battler == nil
  39.       self.bitmap = nil
  40.       loop_animation(nil)
  41.       return
  42.     end
  43.     # 文件名和色相与当前情况有差异的情况下
  44.     if @battler.battler_name != @battler_name or
  45.        @battler.battler_hue != @battler_hue
  46.       # 获取、设置位图
  47.       @battler_name = @battler.battler_name
  48.       @battler_hue = @battler.battler_hue
  49.       self.bitmap = RPG::Cache.battler(@battler_name, @battler_hue)
  50.       @width = bitmap.width
  51.       @height = bitmap.height
  52.       self.ox = @width / 2
  53.       self.oy = @height
  54.       # 如果是战斗不能或者是隐藏状态就把透明度设置成 0
  55.       if @battler.dead? or @battler.hidden
  56.         self.opacity = 0
  57.       end
  58.     end
  59.     # 动画 ID 与当前的情况有差异的情况下
  60.     if @battler.damage == nil and
  61.        @battler.state_animation_id != @state_animation_id
  62.       @state_animation_id = @battler.state_animation_id
  63.       loop_animation($data_animations[@state_animation_id])
  64.     end
  65.     # 应该被显示的角色的情况下
  66.     if @battler.is_a?(Game_Actor) and @battler_visible
  67.       # 不是主状态的时候稍稍降低点透明度
  68.       if $game_temp.battle_main_phase
  69.         self.opacity += 3 if self.opacity < 255
  70.       else
  71.         self.opacity -= 3 if self.opacity > 207
  72.       end
  73.     end
  74.     # 明灭
  75.     if @battler.blink
  76.       blink_on
  77.     else
  78.       blink_off
  79.     end
  80.     # 不可见的情况下
  81.     unless @battler_visible
  82.       # 出现
  83.       if not @battler.hidden and not @battler.dead? and
  84.          (@battler.damage == nil or @battler.damage_pop)
  85.         appear
  86.         @battler_visible = true
  87.       end
  88.     end
  89.     # 可见的情况下
  90.     if @battler_visible
  91.       # 逃跑
  92.       if @battler.hidden
  93.         $game_system.se_play($data_system.escape_se)
  94.         escape
  95.         @battler_visible = false
  96.       end
  97.       # 白色闪烁
  98.       if @battler.white_flash
  99.         # whiten # 删删删删删删 恢复本行可以使得敌人变大的同时闪白光...
  100.         @zoom = 100 if @battler.is_a?(Game_Enemy) # 加加加加加加
  101.         @battler.white_flash = false
  102.       end
  103.       if @zoom > 0         # 加加加加加加
  104.         # 加加加加加加 修改下面这个@zoom的数值可以微调敌人攻击变大的时间
  105.         # 如果修改请务必改成能被100整除的正整数,例如5,20等等,数值越小,变大时间越长,反之亦然...
  106.         @zoom -= 10
  107.         t = 15 # 这个数值必须是正数,数值越大,敌人攻击时越大
  108.         self.zoom_x = self.zoom_y = 1 - t * @zoom * (@zoom - 100) / 10000.0  # 加加加加加加
  109.       end                  # 加加加加加加
  110.       # 动画
  111.       if @battler.animation_id != 0
  112.         animation = $data_animations[@battler.animation_id]
  113.         animation(animation, @battler.animation_hit)
  114.         @battler.animation_id = 0
  115.       end
  116.       # 伤害
  117.       if @battler.damage_pop
  118.         damage(@battler.damage, @battler.critical)
  119.         @battler.damage = nil
  120.         @battler.critical = false
  121.         @battler.damage_pop = false
  122.       end
  123.       # korapusu
  124.       if @battler.damage == nil and @battler.dead?
  125.         if @battler.is_a?(Game_Enemy)
  126.           $game_system.se_play($data_system.enemy_collapse_se)
  127.         else
  128.           $game_system.se_play($data_system.actor_collapse_se)
  129.         end
  130.         collapse
  131.         @battler_visible = false
  132.       end
  133.     end
  134.     # 设置活动块的坐标
  135.     self.x = @battler.screen_x
  136.     self.y = @battler.screen_y
  137.     self.z = @battler.screen_z
  138.   end
  139. end
复制代码

作者: 正太君    时间: 2019-3-3 11:00
明明可以...
  1. #==============================================================================
  2. # ■ Sprite_Battler
  3. #------------------------------------------------------------------------------
  4. #  战斗显示用活动块。Game_Battler 类的实例监视、
  5. # 活动块的状态的监视。
  6. #==============================================================================

  7. class Sprite_Battler < RPG::Sprite
  8.   #--------------------------------------------------------------------------
  9.   # ● 定义实例变量
  10.   #--------------------------------------------------------------------------
  11.   attr_accessor :battler                  # 战斗者
  12.   #--------------------------------------------------------------------------
  13.   # ● 初始化对像
  14.   #     viewport : 显示端口
  15.   #     battler  : 战斗者 (Game_Battler)
  16.   #--------------------------------------------------------------------------
  17.   def initialize(viewport, battler = nil)
  18.     super(viewport)
  19.     @battler = battler
  20.     @battler_visible = false
  21.     @zoom = 0 # 加加加加加加
  22.   end
  23.   #--------------------------------------------------------------------------
  24.   # ● 释放
  25.   #--------------------------------------------------------------------------
  26.   def dispose
  27.     if self.bitmap != nil
  28.       self.bitmap.dispose
  29.     end
  30.     super
  31.   end
  32.   #--------------------------------------------------------------------------
  33.   # ● 刷新画面
  34.   #--------------------------------------------------------------------------
  35.   def update
  36.     super
  37.     # 战斗者为 nil 的情况下
  38.     if @battler == nil
  39.       self.bitmap = nil
  40.       loop_animation(nil)
  41.       return
  42.     end
  43.     # 文件名和色相与当前情况有差异的情况下
  44.     if @battler.battler_name != @battler_name or
  45.        @battler.battler_hue != @battler_hue
  46.       # 获取、设置位图
  47.       @battler_name = @battler.battler_name
  48.       @battler_hue = @battler.battler_hue
  49.       self.bitmap = RPG::Cache.battler(@battler_name, @battler_hue)
  50.       @width = bitmap.width
  51.       @height = bitmap.height
  52.       self.ox = @width / 2
  53.       self.oy = @height
  54.       # 如果是战斗不能或者是隐藏状态就把透明度设置成 0
  55.       if @battler.dead? or @battler.hidden
  56.         self.opacity = 0
  57.       end
  58.     end
  59.     # 动画 ID 与当前的情况有差异的情况下
  60.     if @battler.damage == nil and
  61.        @battler.state_animation_id != @state_animation_id
  62.       @state_animation_id = @battler.state_animation_id
  63.       loop_animation($data_animations[@state_animation_id])
  64.     end
  65.     # 应该被显示的角色的情况下
  66.     if @battler.is_a?(Game_Actor) and @battler_visible
  67.       # 不是主状态的时候稍稍降低点透明度
  68.       if $game_temp.battle_main_phase
  69.         self.opacity += 3 if self.opacity < 255
  70.       else
  71.         self.opacity -= 3 if self.opacity > 207
  72.       end
  73.     end
  74.     # 明灭
  75.     if @battler.blink
  76.       blink_on
  77.     else
  78.       blink_off
  79.     end
  80.     # 不可见的情况下
  81.     unless @battler_visible
  82.       # 出现
  83.       if not @battler.hidden and not @battler.dead? and
  84.          (@battler.damage == nil or @battler.damage_pop)
  85.         appear
  86.         @battler_visible = true
  87.       end
  88.     end
  89.     # 可见的情况下
  90.     if @battler_visible
  91.       # 逃跑
  92.       if @battler.hidden
  93.         $game_system.se_play($data_system.escape_se)
  94.         escape
  95.         @battler_visible = false
  96.       end
  97.       # 白色闪烁
  98.       if @battler.white_flash
  99.         # whiten # 删删删删删删 恢复本行可以使得敌人变大的同时闪白光...
  100.         @zoom = 100 if @battler.is_a?(Game_Enemy) # 加加加加加加
  101.         @battler.white_flash = false
  102.       end
  103.       if @zoom > 0         # 加加加加加加
  104.         # 加加加加加加 修改下面这个@zoom的数值可以微调敌人攻击变大的时间
  105.         # 如果修改请务必改成能被100整除的正整数,例如5,20等等,数值越小,变大时间越长,反之亦然...
  106.         @zoom -= 1
  107.         t = 15 # 这个数值必须是正数,数值越大,敌人攻击时越大
  108.         self.zoom_x = self.zoom_y = 1 - t * @zoom * (@zoom - 100) / 10000.0  # 加加加加加加
  109.         s = 10 # 这个数值可以是任意非0实数,数值越大,敌人攻击时位置越低
  110.         self.y = @battler.screen_y - @zoom * (@zoom - 100) / s  # 加加加加加加
  111.       end                  # 加加加加加加
  112.       # 动画
  113.       if @battler.animation_id != 0
  114.         animation = $data_animations[@battler.animation_id]
  115.         animation(animation, @battler.animation_hit)
  116.         @battler.animation_id = 0
  117.       end
  118.       # 伤害
  119.       if @battler.damage_pop
  120.         damage(@battler.damage, @battler.critical)
  121.         @battler.damage = nil
  122.         @battler.critical = false
  123.         @battler.damage_pop = false
  124.       end
  125.       # korapusu
  126.       if @battler.damage == nil and @battler.dead?
  127.         if @battler.is_a?(Game_Enemy)
  128.           $game_system.se_play($data_system.enemy_collapse_se)
  129.         else
  130.           $game_system.se_play($data_system.actor_collapse_se)
  131.         end
  132.         collapse
  133.         @battler_visible = false
  134.       end
  135.     end
  136.     # 设置活动块的坐标
  137.     self.x = @battler.screen_x
  138.     self.y = @battler.screen_y if @zoom <= 0
  139.     self.z = @battler.screen_z
  140.   end
  141. end
复制代码

作者: 爆焰    时间: 2019-3-4 01:29
正太君 发表于 2019-3-3 11:00
明明可以...

这是我的范例。好像还可以,谢啦。





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