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

Project1

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

[有事请教] 如何做到让跟在主角后面的队友去攻击接近的敌人.ABS模式

[复制链接]
回帖奖励 390 星屑 回复本帖可获得 10 星屑奖励! 每人限 1 次

Lv4.逐梦者

梦石
0
星屑
7335
在线时间
1444 小时
注册时间
2018-12-16
帖子
2036
跳转到指定楼层
1

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

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

x
本帖最后由 play337 于 2024-11-23 09:02 编辑

如何做到让跟在主角后面的队友去攻击接近的敌人.ABS模式

我现在想到的思路是:

01.队友是使用队友图形的事件
02.他们的[自己移动路线]中有[条件语句],[会定期检查自己]、[玩家]和[带有敌人记号]的[事件]之间的[距离]
03.将[第一个结果][指定为他们的目标],然后[切换]到一个[新的事件页面]
04.在那里[他们再次检查自己]和[目标之间的距离][如果不够近][就移动到敌人那里][如果够近][就进行攻击]
05.[如果目标不再存在(已经死亡)][他们会回到第一个事件页面]
06.[前往玩家]或[新的敌人]

我在想这些有办法[用插件].或是[脚本]处理吗?

因为应该是 队友 或者是 怪物 也大概都相同.

如果是使用脚本处理 是不是比较好改全部的队友 或全部的怪物 他们的模式. 不然如果很多 我不就改到晕倒...

Lv3.寻梦者

梦石
0
星屑
2735
在线时间
257 小时
注册时间
2023-11-16
帖子
126
13
发表于 6 小时前 | 只看该作者
play337 发表于 2024-11-27 05:48
我怎麽测试变量17都还是0....

>_

这我是真没办法了,我又没办法调试你有什么问题
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
7335
在线时间
1444 小时
注册时间
2018-12-16
帖子
2036
12
 楼主| 发表于 8 小时前 | 只看该作者
我怎麽测试变量17都还是0....

>_<
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2735
在线时间
257 小时
注册时间
2023-11-16
帖子
126
11
发表于 昨天 22:25 | 只看该作者
kyjoke 发表于 2024-11-26 05:42
在事件页里脚本调用:$gameMap.event(this.eventId()).findNearestEvent();
按道理来说只要你有事件就可 ...

实在不行你发联系方式吧
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2735
在线时间
257 小时
注册时间
2023-11-16
帖子
126
10
发表于 昨天 05:42 | 只看该作者
play337 发表于 2024-11-26 00:11
是没有错误没错.... 不过变量17不管怎模样值都是0....

我测试一下 我最后改成没找到人 变量17 = 42 ... 结 ...

在事件页里脚本调用:$gameMap.event(this.eventId()).findNearestEvent();
按道理来说只要你有事件就可以搜索到的

点评

我怎麽测试变量17都还是0......不知道问题出在哪...也没有任何错误消息...  发表于 昨天 11:21
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
7335
在线时间
1444 小时
注册时间
2018-12-16
帖子
2036
9
 楼主| 发表于 昨天 00:11 | 只看该作者
是没有错误没错.... 不过变量17不管怎模样值都是0....

我测试一下 我最后改成没找到人 变量17 = 42 ... 结果也还是 0.... 都没有跑...

是不是要甚麽插件 才会跑 ?

  1. Game_Event.prototype.findNearestEvent = function() {
  2.     // 没有事件或者不获得目标则不运行
  3.     if (!$gameMap.events().length || $gameVariables.value(17) > 0) return;

  4.     let nearestEvent = null; // 最近的事件
  5.     let minDistance = 999;   // 最小距离

  6.     // 循环查找所有事件
  7.     $gameMap.events().forEach(function(event) {
  8.         let dx = event.x - $gamePlayer.x; // 事件与玩家的X轴距离
  9.         let dy = event.y - $gamePlayer.y; // 事件与玩家的Y轴距离
  10.         let distance = Math.sqrt(dx * dx + dy * dy); // 计算欧几里得距离

  11.         if (distance < minDistance) { // 如果当前事件距离小于最小距离
  12.             minDistance = distance;  // 更新最小距离
  13.             nearestEvent = event;    // 更新最近的事件
  14.         }
  15.     });

  16.     // 如果找到最近的事件
  17.     if (nearestEvent) {
  18.         // 将最近事件的ID保存在游戏变量17中
  19.         $gameVariables.setValue(17, nearestEvent.eventId());
  20.     } else {
  21.         // 如果没有找到有效事件,清除游戏变量
  22.         $gameVariables.setValue(17, 42);
  23.     }
  24. };
复制代码

回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2735
在线时间
257 小时
注册时间
2023-11-16
帖子
126
8
发表于 前天 20:49 | 只看该作者
play337 发表于 2024-11-25 16:26
为什麽我测试了几次 都得到这样的错误呢?

少了括号了,这样改:
  1. Game_Event.prototype.findNearestEvent = function() {
  2.     // 没有事件或者不获得目标则不运行
  3.     if (!$gameMap.events().length || $gameVariables.value(17) > 0) return;

  4.     let nearestEvent = null; // 最近的事件
  5.     let minDistance = 999;   // 最小距离

  6.     // 循环查找所有事件
  7.     $gameMap.events().forEach(function(event) {
  8.         let dx = event.x - $gamePlayer.x; // 事件与玩家的X轴距离
  9.         let dy = event.y - $gamePlayer.y; // 事件与玩家的Y轴距离
  10.         let distance = Math.sqrt(dx * dx + dy * dy); // 计算欧几里得距离

  11.         if (distance < minDistance) { // 如果当前事件距离小于最小距离
  12.             minDistance = distance;  // 更新最小距离
  13.             nearestEvent = event;    // 更新最近的事件
  14.         }
  15.     });

  16.     // 如果找到最近的事件
  17.     if (nearestEvent) {
  18.         // 将最近事件的ID保存在游戏变量17中
  19.         $gameVariables.setValue(17, nearestEvent.eventId());
  20.     } else {
  21.         // 如果没有找到有效事件,清除游戏变量
  22.         $gameVariables.setValue(17, 0);
  23.     }
  24. };
复制代码
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
7335
在线时间
1444 小时
注册时间
2018-12-16
帖子
2036
7
 楼主| 发表于 前天 16:26 | 只看该作者
为什麽我测试了几次 都得到这样的错误呢?



JAVASCRIPT 代码复制
  1. Game_Event.prototype.findNearestEvent = function() {
  2.                 if (!$gameMap.events().length ||  $gameVariables.value(17) > 0) return; // 没有事件或者不获得目标则不运行
  3.                 let nearestEvent = null; // 最近的事件
  4.                 let minDistance = 999; // 最小距离
  5.                 // 循环查找所有事件
  6.                 $gameMap.events().forEach(function(event) {
  7.                                 let dx = event.x - $gamePlayer.x; // 事件与玩家的X轴距离
  8.                                 let dy = event.y - $gamePlayer.y; // 事件与玩家的Y轴距离
  9.                                 let distance = Math.sqrt(dx * dx + dy * dy); // 计算欧几里得距离
  10.                                 if (distance < minDistance) { // 如果当前事件距离小于最小距离
  11.                                         minDistance = distance; // 更新最小距离
  12.                                         nearestEvent = event; // 更新最近的事件
  13.                                 }
  14.                 });
  15.                 // 如果找到最近的事件
  16.                 if (nearestEvent) {
  17.                         // 将最近事件的ID保存在游戏变量17中
  18.                         $gameVariables.setValue(17, nearestEvent.eventId());
  19.  
  20.                 } else {
  21.                         // 如果没有找到有效事件,清除游戏变量
  22.                         $gameVariables.setValue(17, 0);
  23.                 }
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2735
在线时间
257 小时
注册时间
2023-11-16
帖子
126
6
发表于 前天 12:55 | 只看该作者
play337 发表于 2024-11-24 21:44
你好厉害啊! 我按下 F8 在控制台 输入: $gameMap.events();

38: Game_PrefabEvent {_originalEventId: 15, ...

写一个简单的方法,这里是我用的,查找最近距离的敌人:
        Game_Event.prototype.findNearestEvent = function() {
                if (!$gameMap.events().length ||  $gameVariables.value(20) > 0) return; // 没有事件或者不获得目标则不执行
                let nearestEvent = null; // 最近的事件
                let minDistance = 999; // 最小距离
                // 循环查找所有事件
                $gameMap.events().forEach(function(event) {
                                let dx = event.x - $gamePlayer.x; // 事件与玩家的X轴距离
                                let dy = event.y - $gamePlayer.y; // 事件与玩家的Y轴距离
                                let distance = Math.sqrt(dx * dx + dy * dy); // 计算欧几里得距离
                                if (distance < minDistance) { // 如果当前事件距离小于最小距离
                                        minDistance = distance; // 更新最小距离
                                        nearestEvent = event; // 更新最近的事件
                                }
                });
                // 如果找到最近的事件
                if (nearestEvent) {
                        // 将最近事件的ID存储在游戏变量20中
                        $gameVariables.setValue(20, nearestEvent.eventId());

                } else {
                        // 如果没有找到有效事件,清除游戏变量
                        $gameVariables.setValue(20, 0);
                }

你在事件页的脚本调用调用完这个方法,此时距离最近的事件就被写入了游戏变量20当中
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
7335
在线时间
1444 小时
注册时间
2018-12-16
帖子
2036
5
 楼主| 发表于 3 天前 | 只看该作者
你好厉害啊! 我按下 F8 在控制台 输入: $gameMap.events();

38: Game_PrefabEvent {_originalEventId: 15, _eventId: 47, _isTemplate: undefined, _templateId: 0, _templateEvent: null, …}
39: Game_PrefabEvent {_originalEventId: 15, _eventId: 48, _isTemplate: undefined, _templateId: 0, _templateEvent: null, …}
40: Game_PrefabEvent {_originalEventId: 15, _eventId: 49, _isTemplate: undefined, _templateId: 0, _templateEvent: null, …}
41: Game_PrefabEvent {_originalEventId: 15, _eventId: 50, _isTemplate: undefined, _templateId: 0, _templateEvent: null, …}
42: Game_PrefabEvent {_originalEventId: 15, _eventId: 51, _isTemplate: undefined, _templateId: 0, _templateEvent: null, …}
43: Game_PrefabEvent {_originalEventId: 15, _eventId: 52, _isTemplate: undefined, _templateId: 0, _templateEvent: null, …}
44: Game_PrefabEvent {_originalEventId: 15, _eventId: 53, _isTemplate: undefined, _templateId: 0, _templateEvent: null, …}
45: Game_PrefabEvent {_originalEventId: 15, _eventId: 54, _isTemplate: undefined, _templateId: 0, _templateEvent: null, …}

创建越多就越来越长....

哪脚本我应该要如何让我的队友去寻找这些一直冒出来的新的敌人呢?
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-27 14:09

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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