Project1

标题: 请教如何调整战斗时技能动画的显示优先度 [打印本页]

作者: 赛露休斯    时间: 2016-11-24 10:11
标题: 请教如何调整战斗时技能动画的显示优先度
比如我们战斗时放一个技能,一般技能动画的优先级是在敌人图的前面播放。但是我现在要做一个技能,动画优先级是在敌人战斗图的后面、背景的前面。
比如说“地震”魔法,这个动画显示的优先度如果放到敌人前面就不太适合了,需要放到敌人图的后面。(其它的像是敌人命中闪烁等等效果还是照正常显示)
这个动画显示优先度要怎么改?只改某几个编号的优先度。
作者: RaidenInfinity    时间: 2016-11-27 12:08
RUBY 代码复制
  1. class Sprite_Battler < Sprite_Base
  2.  
  3.   alias :zchange_animation_set_sprites :animation_set_sprites
  4.  
  5.   def animation_set_sprites(frame)
  6.     zchange_animation_set_sprites(frame)
  7.     @ani_sprites.each_with_index do |sprite, i|
  8.       next unless sprite   
  9.       sprite.z -= 400 if [72,74,76].include?(@animation.id)
  10.       #将[72,74,76]改成你想要出现在后面的动画的ID组
  11.       #如果有一部分图像仍然出现在战斗图上面的问题,请尝试把400改成420或450等比较大的值
  12.     end  
  13.   end
  14.  
  15. end


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

原理是这样:
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。

以上。




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