首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >游戏玩家:如何让敌人先选择射击的目标:

游戏玩家:如何让敌人先选择射击的目标:
EN

Stack Overflow用户
提问于 2016-10-30 05:28:49
回答 1查看 689关注 0票数 0

在游戏制作中,有一个人工智能,我正在尝试设计.这个AI会根据物体离它的距离来选择要首先拍摄的物体。然而,该人工智能系统不仅计算一个物体的距离,而且计算多个物体的距离。因此: instance_nearest无法工作,因为它可能只用于计算特定于的对象的距离。

下面是代码:

代码语言:javascript
复制
if object_exists(E_soldier_AI){
   if(distance_to_object(E_soldier_AI) < global.Dis){
      var t1 = instance_nearest(x,y,E_soldier_AI).x;
      var t2 = instance_nearest(x,y,E_soldier_AI).y;
      instance_create(t1 ,t2, NB);
   }
}
if object_exists(E_soldier_AI2){
   if(distance_to_object(E_soldier_AI2) < global.Dis){
      var t1 = instance_nearest(x,y,E_soldier_AI2).x;
      var t2 = instance_nearest(x,y,E_soldier_AI2).y;
      instance_create(t1 ,t2, NB3);
   }
}
if object_exists(E_soldier_AI3){
   if(distance_to_object(E_soldier_AI3) < global.Dis){
      var t1 = instance_nearest(x,y,E_soldier_AI3).x;
      var t2 = instance_nearest(x,y,E_soldier_AI3).y;
      instance_create(t1 ,t2, NB4);
   }
}
if object_exists(ETank_AI){
   if(distance_to_object(ETank_AI) < global.Dis){
      var t1 = instance_nearest(x,y,ETank_AI).x;
      var t2 = instance_nearest(x,y,ETank_AI).y;
      instance_create(t1 ,t2, NB2);
   }
}

这段代码也不会“剪切它”,因为代码似乎只检查对象E_soldier_AI是否存在,以及" if“语句下面的命令,但是它没有考虑其他的"if”语句。

EN

回答 1

Stack Overflow用户

发布于 2016-10-31 15:38:55

我不能百分之百肯定你想做什么,也不熟悉GameMaker。然而,根据我的理解,您需要解析可用敌人的距离,并选择最接近攻击的敌人。

尝试这样的方法(部分psuedo代码):

代码语言:javascript
复制
var closestDistance = 5000, closestT1, closestT2, closestEnemy;
if object_exists(E_soldier_AI){
   if(distance_to_object(E_soldier_AI) < global.Dis){
      closestDistance = distance_to_object(E_soldier_AI);
      closestT1 = instance_nearest(x,y,E_soldier_AI).x;
      closestT2 = instance_nearest(x,y,E_soldier_AI).y;
      closestEnemy = NB;
   }
}
if object_exists(E_soldier_AI2){
   if(distance_to_object(E_soldier_AI2) < closestDistance ){
      closestDistance = distance_to_object(E_soldier_AI2);
      closestT1 = instance_nearest(x,y,E_soldier_AI2).x;
      closestT2 = instance_nearest(x,y,E_soldier_AI2).y;
      closestEnemy = NB3;
   }
}
if object_exists(E_soldier_AI3){
   if(distance_to_object(E_soldier_AI3) < closestDistance ){
      closestDistance = distance_to_object(E_soldier_AI3);
      closestT1 = instance_nearest(x,y,E_soldier_AI3).x;
      closestT2 = instance_nearest(x,y,E_soldier_AI3).y;
      closestEnemy = NB4;
   }
}
... (Do the same for the tank)
instance_create(closestT1 ,closestT2 , closestEnemy);

(下一步是把所有的敌人放到一个数组中,然后做一个循环)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40326282

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档