查看: 2225|回复: 2

[有事请教] 修改脚本实现走到敌人面前攻击,结果反复横跳

[复制链接]
梦石
0
星屑
23
在线时间
2 小时
注册时间
2021-9-7
回帖
1
发表于 2021-9-10 23:10:39 | 显示全部楼层 |阅读模式

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

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

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

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


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

另外,关于mz的代码,有什么详解的教程可以推荐一下吗?
梦石
0
星屑
2585
在线时间
297 小时
注册时间
2021-5-4
回帖
97
发表于 2021-9-11 09:24:25 | 显示全部楼层
应为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进行修改
什么时候调用什么时候不调用
回复

使用道具 举报

梦石
0
星屑
23
在线时间
2 小时
注册时间
2021-9-7
回帖
1
 楼主| 发表于 2021-9-11 16:50:25 | 显示全部楼层
已解决,之前的写法会调用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. }
复制代码
回复

使用道具 举报

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

本版积分规则

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

在本版发帖返回顶部