查看: 1901|回复: 1

[有事请教] 非SV模式下,分段伤害怎么持续显示?

[复制链接]
梦石
0
星屑
457
在线时间
59 小时
注册时间
2021-10-20
回帖
13
发表于 2021-11-24 00:20:38 | 显示全部楼层 |阅读模式

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

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

×
就是连续攻击次数哪里,怎么样才能做到在动画的过程中就持续显示伤害了,而是等动画结束了才一起出来。
最近用了MOGBATTLEHUD插件,发现怪用技能打人是分段伤害显示的,但是人打怪还是等技能结束了才出伤害。
另外有没有加强打击感的插件呢?麻烦介绍一下,谢谢各位大佬
梦石
0
星屑
1075
在线时间
133 小时
注册时间
2019-5-1
回帖
57
发表于 2021-11-25 11:22:12 | 显示全部楼层
本帖最后由 chinx 于 2021-11-25 19:04 编辑

你想要的这种分段伤害显示,目前有2个比较推荐的方法可以支持:
一是用moghunter(MOG)的动画闪光伤害,也就是说,只要动画发生闪光,就跳伤害,也可以配置什么情形下生效、调低闪光强度降低画面污染提高观感。但这个插件似乎有一些问题我不太记得了。
二是用yanfly(YEP)的战斗行动序列插件,亲自编排什么时候第几帧执行什么动作,第几帧发生伤害,综合演出效果最好但学习成本较高。

第二个问题关于打击感,说它是玄学也没毛病,这完全是靠自己的理解了,因为打击感这种东西,事实上是行动产生的结果的反馈,
这些结果包括了画面闪烁、晃动、音效声场响度的变化配合、所有动作嵌合的精准程度、帧速率的迟滞/加速变化等等。
目前看来MV还没有现成的插件可以做到这些全部内容。你可以先从震动入手(yanfly的行动序列3插件会导致震动只能横向晃动,Y轴需要自己修改插件)。


顺便提一下,我个人修改YEP_X_ActSeqPack3.js以支持Y轴震动的方法如下,供参考:

[pre lang="javascript"]//=============================================================================
// Spriteset_Battle
//=============================================================================

Yanfly.ASP3.Game_Screen_prototype_startShake = Game_Screen.prototype.startShake;
Game_Screen.prototype.startShake = function(power, speed, duration){
        Yanfly.ASP3.Game_Screen_prototype_startShake.call(this, power, speed, duration);
        this._randomRateX = [-1, 0, 1][Math.randomInt(3)];
        this._randomRateY = [-1, 0, 1][Math.randomInt(3)];
};

Spriteset_Battle.prototype.updatePosition = function() {
    var zoom = $gameScreen.zoomScale();
    var clamp = BattleManager.cameraClamp();
    this.scale.x = zoom;
    this.scale.y = zoom;
    var screenX = -1 * $gameScreen.zoomX() * zoom + Graphics.boxWidth / 2;
    var screenY = -1 * $gameScreen.zoomY() * zoom + Graphics.boxHeight / 2;
    if (clamp && zoom >= 1.0) {
      var clampX1 = -Graphics.boxWidth * zoom + Graphics.boxWidth;
      var clampY2 = -Graphics.boxHeight * zoom + Graphics.boxHeight;
      this.x = Math.round(screenX.clamp(clampX1, 0));
      this.y = Math.round(screenY.clamp(clampY2, 0));
    } else if (clamp && zoom < 1.0) {
      this.x = Math.round((Graphics.boxWidth - Graphics.boxWidth * zoom) / 2);
      this.y = Math.round((Graphics.boxHeight - Graphics.boxHeight * zoom) / 2);
    } else {
      this.x = Math.round(screenX);
      this.y = Math.round(screenY);
    }
    if($gameScreen._shakeDuration % 10 == 0){
            $gameScreen._randomRateX = [-1, 0, 1][Math.randomInt(3)];
            $gameScreen._randomRateY = [-1, 0, 1][Math.randomInt(3)];
    }
    this.x += Math.round($gameScreen.shake()*($gameScreen._randomRateX || 1));
    this.y += Math.round($gameScreen.shake()*($gameScreen._randomRateY || 1));//震动加Y轴
};[/pre]

评分

参与人数 1赞 +1 收起 理由
edchgl + 1 感谢大佬

查看全部评分

回复 1 0

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部