Project1

标题: 修改脚本实现走到敌人面前攻击,结果反复横跳 [打印本页]

作者: daznwng    时间: 2021-9-10 23:10
标题: 修改脚本实现走到敌人面前攻击,结果反复横跳
小弟第一次修改脚本,本来想着做一个横板战斗,走到敌人面前攻击,代码写完以后运行起来才发现,确实走到了敌人面前,但是瞬间又回到了原位,并且反复横跳一直不进行下一个动作,我只是在startMove之前获取了一下敌人的信息结果就变成这样了,写的代码如下:


反复横跳的示意图效果如下:



请教各位大佬,是我写的有问题吗?

另外,关于mz的代码,有什么详解的教程可以推荐一下吗?
作者: MH-Pride    时间: 2021-9-11 09:24
应为stepforward 是确认角色的时候向前一小步
你只是修改这个是不够的 因为其他function一直调用这个function
Sprite_Actor.prototype.updateTargetPosition = function() {
    if (this._actor.canMove() && BattleManager.isEscaped()) {
        this.retreat();
    } else if (this.shouldStepForward()) {
       this.stepForward();
    } else if (!this.inHomePosition()) {
        this.stepBack();
    }
};
你要找出全部调用这个stepforward的function进行修改
什么时候调用什么时候不调用
作者: daznwng    时间: 2021-9-11 16:50
已解决,之前的写法会调用Sprite的position,实际上当战斗者走到指定位置后,再次调用stepForward时,position已经改变,就导致移动的x和y重新计算,并且计算的结果是战斗者的起点,导致了反复横跳,因为永远达不到实际的目的地,修改成使用Sprite的homeX和homeY作为计算后解决,并且我也加工了一下,把stepForward和走到敌人面前的方法区分了一下,新增了方法gotoEnemy,这个方法可以实现只有在普通攻击的时候才走到面前,施展魔法等行为站在原地,这个就是我之前想要的效果,贴出代码供大家参考吧

  1. Sprite_Actor.prototype.updateTargetPosition = function() {
  2.     if (this._actor.canMove() && BattleManager.isEscaped()) {
  3.         this.retreat();
  4.     } else if (this.shouldStepForward()) {
  5.         this.stepForward();
  6.     } else if (this.shouldGotoEnemy()) {
  7.         this.gotoEnemy();
  8.     } else if (!this.inHomePosition()) {
  9.         this.stepBack();
  10.     }
  11. };

  12. Sprite_Actor.prototype.shouldGotoEnemy = function() {
  13.     return this._actor.isActing() && [0,1].indexOf(BattleManager._action._item._itemId) > -1;
  14. }

  15. Sprite_Actor.prototype.gotoEnemy = function () {
  16.     let target;
  17.     target = BattleManager._targets[0];
  18.     if (target && target.isEnemy()) {
  19.         let x = target._screenX-this._homeX+32;
  20.         let y = target._screenY-this._homeY;
  21.         this.startMove(x, y, 12);
  22.     }
  23. }
复制代码





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