【问题标题】:Gamemaker: How to get an enemy to choose which object to shoot first:Gamemaker:如何让敌人选择先射击哪个物体:
【发布时间】:2016-11-01 00:04:22
【问题描述】:

在 Game Maker 中,有一个我正在尝试设计的 AI……这个 AI 会根据物体与它的距离来选择首先拍摄哪个物体。然而,这个人工智能系统不仅计算一个物体的距离,它还计算几个物体的距离。因此:instance_nearest 不起作用,因为它可能只用于计算特定对象的距离。

代码如下:

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”语句。 .

【问题讨论】:

    标签: artificial-intelligence game-maker


    【解决方案1】:

    我不是 100% 确定你想做什么,也不熟悉 GameMaker。但是,据我了解,您想解析可用敌人的距离并选择最近的一个进行攻击。

    尝试这样的事情(部分是伪代码):

    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);
    

    (下一步是将所有敌人放入一个数组中,改为循环)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-11
      • 1970-01-01
      相关资源
      最近更新 更多