0

私はあなたが敵と戦うフラッシュゲームに取り組んでいます。スライムと呼んだ敵の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
      }
    }

「slime」をすべて「target」に置き換えたことに注意してください。この時点で、任意のムービークリップで関数を呼び出すことができ、そのムービークリップのヒットがチェックされます。

コードをあなたのものとまったく同じようにするには、これを追加するだけです:

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

機能するためには、このように配列で宣言する前に、敵がステージに存在する必要があることに注意してください。

配列内のすべての敵を書き出す気がなく、敵の正確な数がわかっている場合は、フラッシュの機能を利用してムービークリップ名を作成できます。

これは次のようになり、すべての敵に敵1、敵2、敵3などの名前を付けてから、forループを次のようにします。

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