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

Project1

 找回密码
 注册会员
搜索

求一个敌人攻击敌人的战斗图会放大感觉冲出屏幕的感觉。

查看数: 2516 | 评论数: 4 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2019-2-27 23:33

正文摘要:

就是玩过废土灰姑娘觉得这个功能很有意思!但是又不知道具体是怎么实现的。 就是敌人攻击你的时候敌人的战斗图会向你冲来一样,请问该如何实现? ...

回复

正太君 发表于 2019-3-3 11:00:28
明明可以...
  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
复制代码

点评

最好是从战斗图来改,用PS把所有战斗图的画布高度改成一个值,没有图像的地方留透明就好了,统一微调,这样比改脚本更直观且有针对性...  发表于 2019-3-4 00:45
你好,请问如何设置某个id的敌人的数值不一样?因为我的敌人高度有大有小,高的可以了,低的不行了,低的可以了高的不行了。  发表于 2019-3-4 00:37
差不多这个效果了。谢谢,我自己修改下  发表于 2019-3-3 22:37

评分

参与人数 1星屑 +150 收起 理由
RyanBern + 150 认可答案

查看全部评分

正太君 发表于 2019-2-28 20:58:54
帮你修改了默认脚本,不知道楼主是不是要这个效果...攻击时变大的倍率和时间可以修改...

增加脚本的地方有标识:  # 加加加加加加
删除脚本的地方有标识:  # 删删删删删删
下载范例 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-2 00:49
不行,调成-的攻击时敌人直接消失了。  发表于 2019-3-2 00:42
137行改成self.y = @battler.screen_y if @zoom <= 0,然后if @zoom > 0 的下面加self.y = 你的纵坐标公式 就行了,以上没测试,均为目测修改...  发表于 2019-3-1 23:39
谢谢,请问有办法修改y值吗?我有的敌人比较高,一攻击就看到脚而已。敌人放大后超过角色战斗状态栏都可以,最好是能看到敌人全身的那种放大  发表于 2019-3-1 23:18
那就来一瓶统一冰...  发表于 2019-3-1 22:13
紫英晓狼1130 发表于 2019-2-28 12:50:42
好像是动画就能解决的问题?
拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

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

GMT+8, 2024-11-21 23:30

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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