Спрайты и массивы as3 - PullRequest
       20

Спрайты и массивы as3

1 голос
/ 01 апреля 2011

У меня есть спрайт под названием еда, который добавляется на экран с помощью таймера.с течением времени на экран добавляется больше продуктов.Как мне проверить все эти пищевые спрайты другим объектом?(функция makeItem создает спрайт, кстати)

 private function placeFood(event:TimerEvent = null):void{   
        var rndI:uint = Math.floor(Math.random() * DIM);  //sets a random integer based on the the floor
        var rndJ:uint = Math.floor(Math.random() * DIM);

        var rndX:Number = grid[rndI][rndJ].x; // sets a grid position for the food item to go
        var rndY:Number = grid[rndI][rndJ].y;



        food = makeItem(Math.random() * 0xFFFFFF);// random color
        food.x = rndX;
        food.y = rndY;

        var foodArray:Array = new Array();
        foodArray.push(food);
        trace(foodArray.length)

        addChild(food); //adds the food to the board


        for (var i:uint = 0; i < snake.length; i++){
            if (rndY == snake[i].y && rndX == snake[i].x){ 
                placeFood();
            }
        } 
    }

Ответы [ 3 ]

3 голосов
/ 01 апреля 2011

Добавьте продукты в массив и переберите этот массив, выполнив hitTestObject.Что-то вроде:

var foods:Array = new Array();
foods.push(makeItem(blah));
...
for each (food in foods) {
  food.hitTestObject(object);
}
1 голос
/ 04 октября 2013

Другой способ избежать массивов - использовать спрайт, содержащий всю еду.Каждый спрайт - это набор спрайтов и, следовательно, дерево.Вот что я использую для обнаружения попаданий: 1 специальный спрайт содержит только врагов / еду.Бегите через всех детей, и вам даже не нужно проверять их типы.Примените их, если необходимо.

// begin
var foodCollection: Sprite = new Sprite();

// time passes, food is added
foodCollection.addChild(food);

// hit test
for (var i:int = 0; i < foodCollection.NumChildren; i++)
{
    var food: Sprite = foodCollection.getChildAt(i);
    // test
}
1 голос
/ 01 апреля 2011

Похоже, вы кладете предметы на фиксированную сетку. Продукты питания перемещаются? Ваша еда не движется, а ваша змея (или что-либо сталкивается с едой) делает это, вы можете значительно оптимизировать обнаружение столкновений, выясняя, какой квадрат (ы) сетки занимает движущийся объект и проверяя только еду в этой локальной области.

Вообще говоря, когда вам нужно выполнить обнаружение столкновений между многими объектами, вы делаете это за несколько проходов. Первый проход будет состоять из наименее затратных в вычислительном отношении проверок для отбраковки вещей, которые не могут сталкиваться друг с другом, таких как объекты, которые находятся очень далеко друг от друга, отходят друг от друга и т. Д. Ваш следующий проход может быть чем-то вроде простого граничного прямоугольника или кругового теста , Наконец, когда вы дошли до нескольких предметов, которые проходят все дешевые тесты, вы можете использовать более дорогие и точные тесты попаданий, такие как попиксельные, между масками попаданий.

...