查看: 1841|回复: 1

[已经解决] 请教如何调整战斗时技能动画的显示优先度

[复制链接]
梦石
0
星屑
167
在线时间
434 小时
注册时间
2009-1-1
回帖
557
发表于 2016-11-24 10:11:46 | 显示全部楼层 |阅读模式

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

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

×
比如我们战斗时放一个技能,一般技能动画的优先级是在敌人图的前面播放。但是我现在要做一个技能,动画优先级是在敌人战斗图的后面、背景的前面。
比如说“地震”魔法,这个动画显示的优先度如果放到敌人前面就不太适合了,需要放到敌人图的后面。(其它的像是敌人命中闪烁等等效果还是照正常显示)
这个动画显示优先度要怎么改?只改某几个编号的优先度。

评分

参与人数 1星屑 +50 收起 理由
RaidenInfinity + 50 结帖

查看全部评分

最近在研究XAS
梦石
0
星屑
6891
在线时间
7027 小时
注册时间
2013-11-2
回帖
1263

开拓者剧作品鉴家

发表于 2016-11-27 12:08:34 | 显示全部楼层
[pre lang="ruby"]
class Sprite_Battler < Sprite_Base
  
  alias :zchange_animation_set_sprites :animation_set_sprites
  
  def animation_set_sprites(frame)
    zchange_animation_set_sprites(frame)
    @ani_sprites.each_with_index do |sprite, i|
      next unless sprite   
      sprite.z -= 400 if [72,74,76].include?(@animation.id)
      #将[72,74,76]改成你想要出现在后面的动画的ID组
      #如果有一部分图像仍然出现在战斗图上面的问题,请尝试把400改成420或450等比较大的值
    end  
  end
  
end  
[/pre]

使用这个插件脚本并修改指定的数值即可。(如果不会安装的话,请参照我签名档内的链接)

原理是这样:
Sprite_Base是默认系统内负责掌管动画的类。一切关于动画的事都要在这儿做改动。
但是继承Sprite_Base的类有两个(掌管战斗图的Sprite_Battler和掌管行走图的Sprite_Character),而我们只需要改战斗图,所以用了:
class Sprite_Battler < Sprite_Base 来作为改动的类
那么读取每个动画帧的资料并在屏幕上组合成图像的方法是animation_set_sprites。
那么我用alias(别名)来在这个方法的后方增添了一段代码:
循环 @ani_sprites(存着组成动画的图像精灵/容器的数组)
如果动画ID匹配的话,将数组里面的各个sprite(图像精灵)的Z值减去400。(Z值越大越靠前,越小则越靠后)

为什么减掉400呢?我们看Sprite_Base的第207行,Sprite_Battler的第82行和 Game_Enemy的第128行。
Sprite_Base的第207行:sprite.z = self.z + 300 + i
Sprite_Battler的第82行:self.z = @battler.screen_z
Game_Enemy的第128行:return 100

那么你可以知道的是 如果要让动画图出现在敌人的背后,就必须减去300(动画的基本Z值)再减去100(战斗图的基本Z值)。
当然如果你发现还是有问题或者只有一部分的图像在后面,你可以试着增加减去的值,比如420。

以上。

评分

参与人数 2星屑 +215 梦石 +1 收起 理由
VIPArcher + 200 + 1 认可答案
赛露休斯 + 15 已解决!认可答案

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部