设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 1479|回复: 2
打印 上一主题 下一主题

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

[复制链接]

Lv1.梦旅人

梦石
0
星屑
23
在线时间
2 小时
注册时间
2021-9-7
帖子
2
跳转到指定楼层
1
发表于 2021-9-10 23:10:39 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

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


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



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

另外,关于mz的代码,有什么详解的教程可以推荐一下吗?

Lv3.寻梦者

梦石
0
星屑
2585
在线时间
297 小时
注册时间
2021-5-4
帖子
101
2
发表于 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进行修改
什么时候调用什么时候不调用
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
23
在线时间
2 小时
注册时间
2021-9-7
帖子
2
3
 楼主| 发表于 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. }
复制代码
回复 支持 反对

使用道具 举报

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

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-4-24 19:13

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表