赞 | 0 |
VIP | 0 |
好人卡 | 0 |
积分 | 0 |
经验 | 0 |
最后登录 | 2021-9-11 |
在线时间 | 2 小时 |
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,这个方法可以实现只有在普通攻击的时候才走到面前,施展魔法等行为站在原地,这个就是我之前想要的效果,贴出代码供大家参考吧
- Sprite_Actor.prototype.updateTargetPosition = function() {
- if (this._actor.canMove() && BattleManager.isEscaped()) {
- this.retreat();
- } else if (this.shouldStepForward()) {
- this.stepForward();
- } else if (this.shouldGotoEnemy()) {
- this.gotoEnemy();
- } else if (!this.inHomePosition()) {
- this.stepBack();
- }
- };
- Sprite_Actor.prototype.shouldGotoEnemy = function() {
- return this._actor.isActing() && [0,1].indexOf(BattleManager._action._item._itemId) > -1;
- }
- Sprite_Actor.prototype.gotoEnemy = function () {
- let target;
- target = BattleManager._targets[0];
- if (target && target.isEnemy()) {
- let x = target._screenX-this._homeX+32;
- let y = target._screenY-this._homeY;
- this.startMove(x, y, 12);
- }
- }
复制代码 |
|