本帖最后由 chinx 于 2021-11-25 19:04 编辑  
 
你想要的这种分段伤害显示,目前有2个比较推荐的方法可以支持: 
一是用moghunter(MOG)的动画闪光伤害,也就是说,只要动画发生闪光,就跳伤害,也可以配置什么情形下生效、调低闪光强度降低画面污染提高观感。但这个插件似乎有一些问题我不太记得了。 
二是用yanfly(YEP)的战斗行动序列插件,亲自编排什么时候第几帧执行什么动作,第几帧发生伤害,综合演出效果最好但学习成本较高。 
 
第二个问题关于打击感,说它是玄学也没毛病,这完全是靠自己的理解了,因为打击感这种东西,事实上是行动产生的结果的反馈, 
这些结果包括了画面闪烁、晃动、音效声场响度的变化配合、所有动作嵌合的精准程度、帧速率的迟滞/加速变化等等。 
目前看来MV还没有现成的插件可以做到这些全部内容。你可以先从震动入手(yanfly的行动序列3插件会导致震动只能横向晃动,Y轴需要自己修改插件)。 
 
 
顺便提一下,我个人修改YEP_X_ActSeqPack3.js以支持Y轴震动的方法如下,供参考: 
 
//============================================================================= // 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轴 }; 
 
 //=============================================================================  
// 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轴  
};  
 
  |