0

我正在开发一个与敌人作战的 Flash 游戏。我为一个我称为史莱姆的敌人做了整个 AI。现在我想在场景中放置多个这个敌人,我想知道我是否必须复制所有代码,例如 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

4

1 回答 1

0

使用函数来包装代码,参数将是您想要的任何影片剪辑。首先,让我们准备一个函数来检查针对“目标”的命中测试。让我们称之为 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);

现在这应该是关于如何检查更多对象的提示。如果你有,比方说,敌人叫“史莱姆”,“史莱姆2”,“地狱犬”和“龙”,你可以做

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

但是,如果您最终拥有更多敌人,则将敌人添加到数组中然后在循环中将函数应用于它们会更​​有用:

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

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

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

如果您不想将数组中的所有敌人都写出来并知道您将拥有的敌人的确切数量 - 您可以利用 flash 的能力来构建影片剪辑名称。

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

    for(i=0; i<numberofenemies; i++){ //replace numberofenemies with the number of enemies
      checkTouch(this["enemy"+i]);
    }
于 2013-04-25T09:52:56.430 回答