2017-05-22 6 views
0

私はゲームを作っています(少なくとも試してみると)私はランダムな位置にスポーンするいくつかのエナミーを持っています。アレイ。そして、ループenterframe内の関数は、その配列内のennemiesをマップ上でランダムに移動させます。だから彼らの動きはランダムですが、それらはすべて同期しているので、同時に同じ動きのペアを作ります。私はそれらを異なる方法で動かす方法を考え出しています。少なくともランダムに遅れをとってそれらを同期させるわけではありません。それは基本的な質問かもしれませんが、私が現在理解していることを説明して説明することができるゲームを作ろうとしているので、あなたの説明とアドバイスに本当に感謝しています。ここでFlash as3:同じIAを持つ敵を別々に動かす

は(そのことについて申し訳ありません、それで私のフランス語ノートのいくつかと、私は、私はテストでそれらを説明できるようなものを覚えておく必要があります:D)私のコードです

のでennemiesはDementorsあるから、 ennemyのスプライトが異なる方向

ここ

に対向含まムービークリップ「DementorAllSpriteは、」ループ機能

ループのenterFrameここ

//set up var Dementor and array 
//duration: random number between 0 et 150 
//Facing: random number arrondi en dessous, donc entre 0 et 3 
var DementorTimer = 0; 
var DementorDuration = Math.random() * 150; 
var DementorFacing: Number = Math.floor(Math.random() * 4); 
var DementorSpeed: Number = 13; 
var enemies_arr:Array = []; 

からコードされ

PlayContainer.addEventListener(Event.ENTER_FRAME, PlayLoop); 

function PlayLoop(loopEvent:Event):void 

{ 

    addDementor(); 
    moveDementor(); 

    function addDementor():void 
    { 
     //max number of ennemies 
     if(enemies_arr.length < 20) 
     { 
      //add le dementor if conditions check 
      var Dementor:DementorAllSprite = new DementorAllSprite(); 

      //positions random on a grass container 
      var startX:int = Math.random() * 5760; 
      var startY:int = Math.random() * 3600 ; 
      Dementor.x = startX; 
      Dementor.y = startY; 

      //add Dementor to grass container and set their transparency (they gain alpha when they hit the Player) 
      GrassContainer.addChild(Dementor); 
      Dementor.alpha=0.4; 

      //store the object in an array 
      enemies_arr.push(Dementor); 
     } 
    } 


    //---Mouvements Dementors---// 
    //Timer = 0, Duration entre 0 et 25, chaque loop rajoute 1 au timer (DementorTimer ++;) 
    //jusqu'a ce que le if ne match plus, puis reset 
    //Facing mvmt: 0= back/1= front/2= right/3= left 
    //Frames Dementor: 1= front/2= back/3= left/4= right 
    //switch = if, else if, else if, .... 

    function moveDementor():void 
    { 
     //check les dementors de l'array (de 0 a leur nombre) 
     for (var j:int = 0; j < enemies_arr.length; j++) 
     { 
      if (DementorTimer < DementorDuration) 
      { 
       switch (DementorFacing) 
       { 
        case 0 : 
        enemies_arr[j].y-=DementorSpeed; 
        enemies_arr[j].gotoAndStop(2) 
        break; 

        case 1 : 
        enemies_arr[j].y+=DementorSpeed; 
        enemies_arr[j].gotoAndStop(1) 
        break; 

        case 2 : 
        enemies_arr[j].x+=DementorSpeed; 
        enemies_arr[j].gotoAndStop(4) 
        break; 

        case 3 : 
        enemies_arr[j].x-=DementorSpeed; 
        enemies_arr[j].gotoAndStop(3) 
       } 
       DementorTimer++; 
      } 
      //reset 
      else 
      { 
       DementorDuration = Math.random() * 150; 
       DementorFacing = Math.floor(Math.random() * 4); 
       DementorTimer = 0; 
      } 
     } 
    } 

} 

また、私はそれらを配列に入れてから痴呆者の動きはかなり短いです(最初は1つしかなく、方向を変える前に多くのように動きましたが、位置がかなり速く変わりました。あなたの助けとあなたの注意

答えて

1

まあ用

とにかく感謝)それは前の方法ダウンしていた)とほとんど変化があったが、それはまだ奇妙だ、私はあなたがいくつかの調整や変更を必要とすると思います。

var DList:Array = ["up", "down", "left", "right"]; 
var DHash:Object = 
{ 
    "up": {"frame":2, "x": 0, "y":-1}, 
    "down": {"frame":1, "x": 0, "y": 1}, 
    "left": {"frame":3, "x":-1, "y": 0}, 
    "right": {"frame":4, "x": 1, "y": 0} 
} 

// Decides how many steps Dementor should take before next reset. 
function resetDementor(target:DementorAllSprite):void 
{ 
    target.stepsLeft = int(10 + 10 * Math.random()); 
} 

// Turns Dementor to a random direction. 
function randomDirection(target:DementorAllSprite):void 
{ 
    target.direction = DList[int(DList.length * Math.random())]; 
    target.gotoAndStop(DHash[target.direction]['frame']); 
} 

PlayContainer.addEventListener(Event.ENTER_FRAME, PlayLoop); 

// First of all, for goodness sake, don't define functions inside functions. 
function PlayLoop(e:Event):void 
{ 
    if (enemies_arr.length < 20) addDementor(); 

    moveDementor(); 
} 

function addDementor():void 
{ 
    //add le dementor if conditions check 
    var Dementor:DementorAllSprite = new DementorAllSprite(); 

    //positions random on a grass container 
    var startX:int = Math.random() * 5760; 
    var startY:int = Math.random() * 3600 ; 
    Dementor.x = startX; 
    Dementor.y = startY; 

    // I guess DementorAllSprite is a MovieClip. 
    // Otherwise you need to add stepsLeft:int and direction:String to the class definition. 
    randomDirection(Dementor); 
    resetDementor(Dementor); 

    //add Dementor to grass container and set their transparency (they gain alpha when they hit the Player) 
    GrassContainer.addChild(Dementor); 
    Dementor.alpha=0.4; 

    //store the object in an array 
    enemies_arr.push(Dementor); 
} 

function moveDementor():void 
{ 
    //check les dementors de l'array (de 0 a leur nombre) 
    for (var j:int = 0; j < enemies_arr.length; j++) 
    { 
     // Get the reference to Dementor. 
     var Dementor:DementorAllSprite = enemies_arr[j]; 

     // Check if Dementor needs a reset. 
     if (Dementor.stepsLeft < 0) 
     { 
      randomDirection(Dementor); 
      resetDementor(Dementor); 
     } 

     // Get the directions object with regard to Dementor's direction. 
     var aDir:Object = DHash[Dementor.direction]; 

     // Move the Dementor. 
     Dementor.x += aDir['x'] * DementorSpeed; 
     Dementor.y += aDir['y'] * DementorSpeed; 

     // Reduce the number of steps to go. 
     Dementor.stepsLeft--; 
    } 
} 
+0

は、あなたの迅速な答えをありがとう、そして私の初心者のミスのためにはい申し訳ありませんが、私が学んでいます。 あなたのコードはちょっと分かりますが、非常に高度な方法で作業するようですが、後でテストで説明できるように理解しようとします。 私はそれを実行しようとしたが、私は次のようなエラーが出た。「target.direction = DList [int(DList.length * Math.random)」の「void型の値を無関係な型番号に暗黙的に変換する」 )]; ' – Ymines

+0

@Yminesが修正されました。関数呼び出しだったはずです:** Math.random()** – Organis

+0

すべてがうまくいきました、ありがとう!いくつかの時間があれば、ロジックや、例えば 'DHash:Object'のようなコードのいくつかの高度な部分を説明できますか?私はあなたがそれを参照するとき、それが何であるのかを漠然と理解していますが、なぜ、どのように使用するのか説明できません。しかし、あなたがそれをしなければ、あなたは私をたくさん助けてくれた神です。いい日を過ごしてください:D – Ymines

関連する問題