Существуют разные способы борьбы с этим.
Я полагаю Дыня1 , Мед1 , ... это экземпляры ваших собственных классов.
Добавьте к каждому из них публичную собственность , расположенную , например:
public var positioned:Boolean=false;
В данный момент ваша функция ItemType просто возвращает случайное целое число, основанное на количестве объектов в массиве PointFood .
Давайте интегрируем проверку, если случайный объект уже позиционирован, используя его недавно добавленное свойство position:
function ItemType(e:Event):Number
{
var found:Boolean;
do
{
found = true;
i = Math.round(Math.random() * 5);
if (PointFood[i].positioned)
{
found = false;
}
} while (!found);
return i;
}
Наконец, измените функцию GenerateItem , чтобы учесть свойство позиционированное - таким образом, просто рандомизируйте позицию, если она false :
function GenerateItem(event:TimerEvent):void
{
if (PointFood[i].positioned == false)
{
axis = Math.round(Math.random() * 709.7) + 44.45;
//this is the random x axis with my scene width
PointFood[i].positioned = true;
PointFood[i].x = axis;
PointFood[i].y = 0;
}
if (PointFood[i].y < 600.95)
{
PointFood[i].y += 10;
}
}
В качестве примечания:
time = new Timer(60);
означает, что ваш таймер срабатывает каждые 60 миллисекунд - это ожидаемое поведение?
Также может быть небольшая логическая проблема с вашим кодом. Как следует из названия GenerateItem, я полагаю, что эта функция должна просто создать новый объект и инициализировать его позицию. К сожалению, похоже, что вы злоупотребляете этой функцией, чтобы выполнять основной игровой цикл. Я бы рекомендовал разделить это на две отдельные функции.