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

Код AS3:
addEventListener(Event.ENTER_FRAME, obh_fn);
function obh_fn(e: Event): void {
mass_vihlop();
vrag_1_fn();
vrag_1_dvigenie_fn();
fn_vistrel_vrag_1();
boll_action();
fn_obvodka();
delet_boll();
fn_hittest();
fn_vzriv_speed();
}
var bah_Array: Array = new Array();
function fn_hittest(): void {
var i: Number = vrag_1_Array.length;
while (i--) {
var j: Number = FireArray.length;
while (j--) {
var vr_1: vrag_1_mc = vrag_1_Array[i];
var boll_st: boll_mc = FireArray[j];
if (vr_1.hitTestObject(boll_st)) {
fn_vzriv(boll_st.x, boll_st.y);
FireArray.splice(j, 1);
removeChild(boll_st);
}
}
}
}
//взрывы, вызывается в fn_hittest
var vzriv_Array: Array = new Array();
var vzriv_torm_Array: Array = new Array(); // торможение брызг
function fn_vzriv(x: Number, y: Number): void {
var ran: Number = Math.random() * 10;
if (ran < 3) {
ran += 2; //минимум брызг
}
var i: Number = 0;
while (ran > i) {
i++;
var vzriv: vzriv_mc = new vzriv_mc();
var j: Number = Math.random();
vzriv.rotation = j * 360;
vzriv.scaleX = j;
vzriv.scaleY = j;
vzriv.x = x;
vzriv.y = y;
vzriv_Array.push(vzriv);
this.addChild(vzriv);
var t: Number = 1;
vzriv_torm_Array.push(t);
}
}
var torm_vzriv: Number = 0.9;
var speed_vzriv: Number = 2;
function fn_vzriv_speed(): void {
var i: Number = vzriv_Array.length;
while (i--) {
var vzriv: vzriv_mc = vzriv_Array[i];
var Vx_vzriv: Number = speed_vzriv * Math.cos(vzriv.rotation * Math.PI / 180) * vzriv_torm_Array[i];
var Vy_vzriv: Number = speed_vzriv * Math.sin(vzriv.rotation * Math.PI / 180) * vzriv_torm_Array[i];
vzriv.x += Vx_vzriv;
vzriv.y += Vy_vzriv;
if (vzriv_torm_Array[i] > 0.1) {
vzriv_torm_Array[i] -= 0.03;
} else {
vzriv_torm_Array[i] = 0;
vzriv.alpha = vzriv.alpha * 0.97;
}
if (vzriv.alpha < 0.05) {
removeChild(vzriv_Array[i]);
vzriv_Array.splice(i, 1);
}
}
}