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

Project1

 找回密码
 注册会员
搜索

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

查看数: 211 | 评论数: 12 | 收藏 2
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2024-11-22 09:41

正文摘要:

本帖最后由 play337 于 2024-11-23 09:02 编辑 如何做到让跟在主角后面的队友去攻击接近的敌人.ABS模式 我现在想到的思路是: 01.队友是使用队友图形的事件 02.他们的[自己移动路线]中有[条件语句],[会定期检查 ...

回复

kyjoke 发表于 8 小时前
play337 发表于 2024-11-27 05:48
我怎麽测试变量17都还是0....

>_

这我是真没办法了,我又没办法调试你有什么问题
play337 发表于 11 小时前
我怎麽测试变量17都还是0....

>_<
kyjoke 发表于 昨天 22:25
kyjoke 发表于 2024-11-26 05:42
在事件页里脚本调用:$gameMap.event(this.eventId()).findNearestEvent();
按道理来说只要你有事件就可 ...

实在不行你发联系方式吧
kyjoke 发表于 昨天 05:42
play337 发表于 2024-11-26 00:11
是没有错误没错.... 不过变量17不管怎模样值都是0....

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

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

点评

我怎麽测试变量17都还是0......不知道问题出在哪...也没有任何错误消息...  发表于 昨天 11:21
play337 发表于 昨天 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. };
复制代码

kyjoke 发表于 前天 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. };
复制代码
kyjoke 发表于 前天 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当中
play337 发表于 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 16:50

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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