用AI复制敌人

时间:2013-04-20 18:00:04

标签: flash variables actionscript-2

我正在制作一款与敌人战斗的Flash游戏。我为一个叫做史莱姆的敌人做了整个人工智能。现在我想把这个敌人的多个放在现场,我想知道我是否必须复制所有代码,例如slime1 slime2等。

if ((img_background.BackGround.wall).hitTest(slime._x + radius, slime._y,true )) { // When the slime hits a right wall
    slime._x -= 8
}

if ((img_background.BackGround.wall).hitTest(slime._x, slime._y + radius, true)) {
    slime._y -= 8;
}
if ((img_background.BackGround.wall).hitTest(slime._x, slime._y - radius, true)) {
    slime._y += 8;
}
if ((img_background.BackGround.wall).hitTest(slime._x - radius, slime._y, true)) {
    slime._x += 8;
}

if ((img_background.BackGround.wall).hitTest(slime._x)){
    SLIwalltouch = 1
}else{
    SLIwalltouch = 0
}

我可以指定一个具有多个值的变量,并执行以下操作:" slime" + numberofslimes ..... 我是新手,我需要帮助。感谢。

注意:我使用的是flash actionscript 2.0

1 个答案:

答案 0 :(得分:0)

使用函数来包装代码,参数将是您想要的任何动画片段。首先,让我们准备一个函数来检查针对" target"的命中测试。我们称之为checkTouch,例如

    function checkTouch(target){
      // When the slime hits a right wall
      if ((img_background.BackGround.wall).hitTest(target._x + radius, target._y,true )){ 
        target._x -= 8
      }
      if ((img_background.BackGround.wall).hitTest(target._x, target._y + radius, true)) {
        target._y -= 8;
      }
      if ((img_background.BackGround.wall).hitTest(target._x, target._y - radius, true)) {
        target._y += 8;
      }
      if ((img_background.BackGround.wall).hitTest(target._x - radius, target._y, true)) {
        target._x += 8;
      }

      if ((img_background.BackGround.wall).hitTest(target._x)){
        SLIwalltouch = 1
      }else{
        SLIwalltouch = 0
      }
    }

请注意,我已经取代了所有"粘液"与"目标"。此时,您可以使用您喜欢的任何动画片段来调用该功能,并且会检查该动画片段的影片剪辑。

使代码与您的代码完全相同,只需添加:

    checkTouch(slime);

现在这应该是如何检查更多对象的提示。如果你有,那就说吧,敌人叫做"粘液"," slime2"," hellhound"和"龙",你可以做到

    checkTouch(slime);
    checkTouch(slime2);
    checkTouch(hellhound);
    checkTouch(dragon);

然而,如果你最终拥有更多的敌人,将敌人添加到一个数组然后在循环中将它应用于它们会更​​有用:

    var all_enemies=[slime, slime2, hellhound, mushroom, ..., enemyN];

    for(enemy in all_enemies){
      checkTouch(enemy);
    }

请注意,为了发挥作用,敌人必须出现在舞台上才能在数组中声明然后这样。

如果你不想写出阵列中的所有敌人,并且知道你所拥有的敌人的确切数量 - 你可以利用闪光灯构建动画片段的能力名。

它是这样的,将所有敌人命名为enemy1,enemy2,enemy3,...... 然后使for循环看起来像这样:

    for(i=0; i<numberofenemies; i++){ //replace numberofenemies with the number of enemies
      checkTouch(this["enemy"+i]);
    }