Показать сообщение отдельно
Старый 30.09.2014, 14:19
neonoviiwolf вне форума Посмотреть профиль Отправить личное сообщение для neonoviiwolf Найти все сообщения от neonoviiwolf
  № 1  
Ответить с цитированием
neonoviiwolf

Регистрация: Jun 2014
Сообщений: 558
По умолчанию Перестаёт работать функция

Написал часть кода к игре, в данном коде фиксируется столкновения (пока просто через хиттест). При столкновении должны разлетаться брызги, всё работает первые где-то 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);
		}
	}
}