Project1

标题: 怎么更改技能动画的层级? [打印本页]

作者: dabaxhei    时间: 2022-3-25 02:27
标题: 怎么更改技能动画的层级?
技能动画都是显示在人物或敌人图的上层,我要做一些光环类的技能,但是动画会遮盖人物
有什么办法改变这个动画的层级? 让它在人物下层
作者: HM495    时间: 2022-3-25 22:58
  1. Sprite_Animation.prototype.initMembers = function() {
  2.     this._targets = [];
  3.     this._animation = null;
  4.     this._mirror = false;
  5.     this._delay = 0;
  6.     this._previous = null;
  7.     this._effect = null;
  8.     this._handle = null;
  9.     this._playing = false;
  10.     this._started = false;
  11.     this._frameIndex = 0;
  12.     this._maxTimingFrames = 0;
  13.     this._flashColor = [0, 0, 0, 0];
  14.     this._flashDuration = 0;
  15.     this._viewportSize = 4096;
  16.     this.z = 8;
  17. };
复制代码


给动画加个字段 根据这个字段调整Sprite_Animation类的.z
默认是8 改成0就到角色下层去了
作者: dabaxhei    时间: 2022-3-26 02:29
HM495 发表于 2022-3-25 22:58
给动画加个字段 根据这个字段调整Sprite_Animation类的.z
默认是8 改成0就到角色下层去了 ...

不会... 这个要怎么加
作者: HM495    时间: 2022-3-26 09:15
本帖最后由 HM495 于 2022-3-26 09:19 编辑
dabaxhei 发表于 2022-3-26 02:29
不会... 这个要怎么加


我只会比较暴力一点的做法
找到rmmz_sprites.js的Spriteset_Base.prototype.createAnimationSprite这个方法
大概在3267行

改成
  1. Spriteset_Base.prototype.createAnimationSprite = function(
  2.     targets, animation, mirror, delay
  3. ) {
  4.     const mv = this.isMVAnimation(animation);
  5.     const sprite = new (mv ? Sprite_AnimationMV : Sprite_Animation)();
  6.     const targetSprites = this.makeTargetSprites(targets);
  7.     const baseDelay = this.animationBaseDelay();
  8.     const previous = delay > baseDelay ? this.lastAnimationSprite() : null;
  9.     if (this.animationShouldMirror(targets[0])) {
  10.         mirror = !mirror;
  11.     }
  12.     sprite.targetObjects = targets;
  13.     sprite.setup(targetSprites, animation, mirror, delay, previous);

  14.     const lowerLayerAnimationList = [1,2,3,4];//数组里填你要显示在角色层之下的动画ID
  15.     sprite.z = lowerLayerAnimationList.includes(sprite._animation.id) ? 0 : 8;

  16.     this._effectsContainer.addChild(sprite);
  17.     this._animationSprites.push(sprite);
  18. };
复制代码


如果其他插件没动这段的话这样就行
作者: dabaxhei    时间: 2022-3-26 17:56
HM495 发表于 2022-3-26 09:15
我只会比较暴力一点的做法
找到rmmz_sprites.js的Spriteset_Base.prototype.createAnimationSpri ...

新建了个项目试了下,还是不行
作者: HM495    时间: 2022-3-26 20:06
dabaxhei 发表于 2022-3-26 17:56
新建了个项目试了下,还是不行

我试了下可以啊
那个id是动画id 不是技能id 没填错吧
作者: dabaxhei    时间: 2022-3-27 17:58
HM495 发表于 2022-3-26 20:06
我试了下可以啊
那个id是动画id 不是技能id 没填错吧

嗯 没填错
作者: 芯☆淡茹水    时间: 2022-3-28 08:52
是这样?
在动画名字里备注 <Lower>  , 这个动画就显示到人物脚下。

JAVASCRIPT 代码复制
  1. //=================================================================================================
  2. ;(() => {
  3. //=================================================================================================
  4. Sprite_Animation.prototype.isLower = function() {
  5.     return this._animation && /<Lower>/.test(this._animation.name);
  6. };
  7. //=================================================================================================
  8. Sprite_AnimationMV.prototype.isLower = function() {
  9.     return this._animation && /<Lower>/.test(this._animation.name);
  10. };
  11. //=================================================================================================
  12. const XR_Spriteset_Battle_createBattleField = Spriteset_Battle.prototype.createBattleField;
  13. Spriteset_Battle.prototype.createBattleField = function() {
  14.     XR_Spriteset_Battle_createBattleField.call(this);
  15.     this._effectsContainer.lowerLayer = new Sprite();
  16.     this._effectsContainer.addChild(this._effectsContainer.lowerLayer);
  17.     this._effectsContainer.addChild = (child) => {
  18.         if (child && child.isLower && child.isLower()) {
  19.             this._effectsContainer.lowerLayer.addChild(child);
  20.         } else Sprite.prototype.addChild.call(this._effectsContainer, child);
  21.     };
  22.     this._effectsContainer.removeChild = (child) => {
  23.         if (child && child.isLower && child.isLower()) {
  24.             this._effectsContainer.lowerLayer.removeChild(child);
  25.         } else Sprite.prototype.removeChild.call(this._effectsContainer, child);
  26.     };
  27. };
  28. //=================================================================================================
  29. })();
  30. //=================================================================================================

作者: dabaxhei    时间: 2022-3-28 19:48
芯☆淡茹水 发表于 2022-3-28 08:52
是这样?
在动画名字里备注   , 这个动画就显示到人物脚下。

谢谢大佬 解决了
作者: dabaxhei    时间: 2022-3-28 20:13
芯☆淡茹水 发表于 2022-3-28 08:52
是这样?
在动画名字里备注   , 这个动画就显示到人物脚下。

和VisuMZ_Battle Core有冲突...怎么办?




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