2013-05-23 1 views
1

У меня есть противник, поражающий кучу плиток, и через петлю я проверяю все плитки, если противник ударяет их. Я прослеживаю их, и некоторые скажут мне, верно это или ложно. Я хочу, чтобы враг случайно выбирал из тех, которые верны, и продолжайте эти плитки. Он отслеживает все плитки, которые находятся в контакте с противником, проблема в том, что я не уверен, как я могу получить те плитки, которые регистрируются как истинные, в свой собственный массив, а затем враг перемещается случайным образом в эти фрагменты.push объекты, которые равны true, в массив

for (var j:int = 0; j < tileset.length; j++){ 
    trace(tileset[j].currentFrameLabel, tileset[j].hitTestObject(enemy)); 
    if (tileset[j].hitTestObject(enemy) && !tileset[j].hitTestObject(player)){ 
       options.push(Boolean(true)); 
      } 

EDIT: вот моя функция таймера, где каждый 5 вторых, я хочу, чтобы противник, чтобы перейти к доступному плитке. Хотя вы не можете видеть набор элементов, это массив, равный мувиклипу, который является плиткой, которая находится в самом цикле for. Так что, в основном, набор фрагментов - это 49 фрагментов фильма. У меня есть эти доступные плитки, вложенные в другой массив, который является параметрами. Затем я делаю var, называемый enemyPick, который будет счетчиком. Вот как я далеко.

function timerenemy (event:TimerEvent) { 

        var options:Array = []; 

        for (var j:int = 0; j < tileset.length; j++){ 
         if (tileset[j].hitTestObject(enemy) && ! tileset[j].tileMiddle.hitTestObject(player)) { 
          //trace(tileset[j].currentFrameLabel, tileset[j].hitTestObject(enemy)); 
          tileset[j].outline.gotoAndStop("attack"); 
          options.push(tileset[j]); 
         } 

         if (options.length > 0){ 
          var enemyPick:int = Math.floor(Math.random()*options.length) 

         } 

        } 
        trace(enemyPick, options); 
      } 

ответ

1

Сначала создайте массив, длина которого - это максимальное количество допустимых фрагментов. Например, в прямой линии плитки одновременно могут быть доступны только две. Теперь, каждый раз, когда вам нужно, чтобы враг перемещал плитки, инициализируйте счетчик равным 0. Затем проведите петлю через каждую плитку и «спросите», касается ли она касания врага. Если это его, запишите его в array [counter] и increment counter. После цикла выберите случайное число от 0 до (счетчик) и используйте массив [случайное число] в качестве плитки, к которой движется противник.

+0

Благодарим за помощь. Думаю, я все собрал, пока не соединил счетчик с фактической плиткой. Как мне это сделать? – Bindlestick

+0

Когда вы просматриваете каждый фрагмент, просто обращайтесь к тайному набору [current_tile], а не к набору метка [j]. При записи приемлемой плитки скопируйте файл плитки [current_tile] (фактическая плитка) в okTiles [counter]. Затем вы выбираете случайный элемент из okTiles, и вы можете ссылаться на него, как на обычную плитку. --EDIT-- О, я вижу, это ActionScript, а не Java. Вышеизложенное может не работать. Вместо этого вы можете записать current_tile (а не ticket [current_tile]) в okTiles [counter]. И в конце, вместо ссылки на okTiles [rand_element], обратитесь к тэктовому набору [okTiles [rand_element]]. – MegaWidget

+0

Кроме того, если вы нашли мой ответ полезным, вы можете «принять» его, нажав зеленую отметку (отметьте) рядом с ней. – MegaWidget